Build: 周日 2025/11/02 20:25:30.66
This commit is contained in:
1
assets/404.html-BT5UyzYW.js
Normal file
1
assets/404.html-BT5UyzYW.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as o,b as n,o as a}from"./app-CsTq_I9B.js";const r={};function l(s,t){return a(),o("div",null,[...t[0]||(t[0]=[n("p",null,"404 Not Found",-1)])])}const i=e(r,[["render",l]]),d=JSON.parse('{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"readingTime":{"minutes":0.01,"words":3},"git":{},"filePathRelative":null,"headers":[]}');export{i as comp,d as data};
|
||||
BIN
assets/KaTeX_AMS-Regular-BQhdFMY1.woff2
Normal file
BIN
assets/KaTeX_AMS-Regular-BQhdFMY1.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_AMS-Regular-DMm9YOAa.woff
Normal file
BIN
assets/KaTeX_AMS-Regular-DMm9YOAa.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_AMS-Regular-DRggAlZN.ttf
Normal file
BIN
assets/KaTeX_AMS-Regular-DRggAlZN.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf
Normal file
BIN
assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff
Normal file
BIN
assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2
Normal file
BIN
assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff
Normal file
BIN
assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2
Normal file
BIN
assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf
Normal file
BIN
assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf
Normal file
BIN
assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Bold-BsDP51OF.woff
Normal file
BIN
assets/KaTeX_Fraktur-Bold-BsDP51OF.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2
Normal file
BIN
assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Regular-CB_wures.ttf
Normal file
BIN
assets/KaTeX_Fraktur-Regular-CB_wures.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2
Normal file
BIN
assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff
Normal file
BIN
assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Bold-Cx986IdX.woff2
Normal file
BIN
assets/KaTeX_Main-Bold-Cx986IdX.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Bold-Jm3AIy58.woff
Normal file
BIN
assets/KaTeX_Main-Bold-Jm3AIy58.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Bold-waoOVXN0.ttf
Normal file
BIN
assets/KaTeX_Main-Bold-waoOVXN0.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2
Normal file
BIN
assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf
Normal file
BIN
assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-BoldItalic-SpSLRI95.woff
Normal file
BIN
assets/KaTeX_Main-BoldItalic-SpSLRI95.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Italic-3WenGoN9.ttf
Normal file
BIN
assets/KaTeX_Main-Italic-3WenGoN9.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Italic-BMLOBm91.woff
Normal file
BIN
assets/KaTeX_Main-Italic-BMLOBm91.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Italic-NWA7e6Wa.woff2
Normal file
BIN
assets/KaTeX_Main-Italic-NWA7e6Wa.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Regular-B22Nviop.woff2
Normal file
BIN
assets/KaTeX_Main-Regular-B22Nviop.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Regular-Dr94JaBh.woff
Normal file
BIN
assets/KaTeX_Main-Regular-Dr94JaBh.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Main-Regular-ypZvNtVU.ttf
Normal file
BIN
assets/KaTeX_Main-Regular-ypZvNtVU.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf
Normal file
BIN
assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2
Normal file
BIN
assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff
Normal file
BIN
assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-Italic-DA0__PXp.woff
Normal file
BIN
assets/KaTeX_Math-Italic-DA0__PXp.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-Italic-flOr_0UB.ttf
Normal file
BIN
assets/KaTeX_Math-Italic-flOr_0UB.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Math-Italic-t53AETM-.woff2
Normal file
BIN
assets/KaTeX_Math-Italic-t53AETM-.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf
Normal file
BIN
assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2
Normal file
BIN
assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff
Normal file
BIN
assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2
Normal file
BIN
assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Italic-DN2j7dab.woff
Normal file
BIN
assets/KaTeX_SansSerif-Italic-DN2j7dab.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf
Normal file
BIN
assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf
Normal file
BIN
assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff
Normal file
BIN
assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2
Normal file
BIN
assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Script-Regular-C5JkGWo-.ttf
Normal file
BIN
assets/KaTeX_Script-Regular-C5JkGWo-.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Script-Regular-D3wIWfF6.woff2
Normal file
BIN
assets/KaTeX_Script-Regular-D3wIWfF6.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Script-Regular-D5yQViql.woff
Normal file
BIN
assets/KaTeX_Script-Regular-D5yQViql.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size1-Regular-C195tn64.woff
Normal file
BIN
assets/KaTeX_Size1-Regular-C195tn64.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size1-Regular-Dbsnue_I.ttf
Normal file
BIN
assets/KaTeX_Size1-Regular-Dbsnue_I.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size1-Regular-mCD8mA8B.woff2
Normal file
BIN
assets/KaTeX_Size1-Regular-mCD8mA8B.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size2-Regular-B7gKUWhC.ttf
Normal file
BIN
assets/KaTeX_Size2-Regular-B7gKUWhC.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size2-Regular-Dy4dx90m.woff2
Normal file
BIN
assets/KaTeX_Size2-Regular-Dy4dx90m.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size2-Regular-oD1tc_U0.woff
Normal file
BIN
assets/KaTeX_Size2-Regular-oD1tc_U0.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size3-Regular-CTq5MqoE.woff
Normal file
BIN
assets/KaTeX_Size3-Regular-CTq5MqoE.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size3-Regular-DgpXs0kz.ttf
Normal file
BIN
assets/KaTeX_Size3-Regular-DgpXs0kz.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size4-Regular-BF-4gkZK.woff
Normal file
BIN
assets/KaTeX_Size4-Regular-BF-4gkZK.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size4-Regular-DWFBv043.ttf
Normal file
BIN
assets/KaTeX_Size4-Regular-DWFBv043.ttf
Normal file
Binary file not shown.
BIN
assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2
Normal file
BIN
assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff
Normal file
BIN
assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff
Normal file
Binary file not shown.
BIN
assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2
Normal file
BIN
assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2
Normal file
Binary file not shown.
BIN
assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf
Normal file
BIN
assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf
Normal file
Binary file not shown.
8
assets/SearchBox-C1RlSAU5.js
Normal file
8
assets/SearchBox-C1RlSAU5.js
Normal file
File diff suppressed because one or more lines are too long
53
assets/app-CsTq_I9B.js
Normal file
53
assets/app-CsTq_I9B.js
Normal file
File diff suppressed because one or more lines are too long
36
assets/architectureDiagram-4X3Z3J56-BeO9gsKE.js
Normal file
36
assets/architectureDiagram-4X3Z3J56-BeO9gsKE.js
Normal file
File diff suppressed because one or more lines are too long
122
assets/blockDiagram-BWRZOBD3-DR5x5WPj.js
Normal file
122
assets/blockDiagram-BWRZOBD3-DR5x5WPj.js
Normal file
File diff suppressed because one or more lines are too long
10
assets/c4Diagram-Q5SP5FFD-BvItCO_c.js
Normal file
10
assets/c4Diagram-Q5SP5FFD-BvItCO_c.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/chunk-4KE642ED-D4iGNsEG.js
Normal file
1
assets/chunk-4KE642ED-D4iGNsEG.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as e}from"./mermaid.esm.min-vSKPWR4X.js";function a(c,t){c.accDescr&&t.setAccDescription?.(c.accDescr),c.accTitle&&t.setAccTitle?.(c.accTitle),c.title&&t.setDiagramTitle?.(c.title)}e(a,"populateCommonDb");export{a as c};
|
||||
1
assets/chunk-6EQESGSB-D8MQkSSJ.js
Normal file
1
assets/chunk-6EQESGSB-D8MQkSSJ.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m,i as e}from"./mermaid.esm.min-vSKPWR4X.js";var r=m((o,t)=>{let a;return t==="sandbox"&&(a=e("#i"+o)),(t==="sandbox"?e(a.nodes()[0].contentDocument.body):e("body")).select(`[id="${o}"]`)},"getDiagramElement");export{r as m};
|
||||
338
assets/chunk-7SRKK4IT-D2ZGI2Yc.js
Normal file
338
assets/chunk-7SRKK4IT-D2ZGI2Yc.js
Normal file
File diff suppressed because one or more lines are too long
220
assets/chunk-AI4T2ZLM-DpT0rwVJ.js
Normal file
220
assets/chunk-AI4T2ZLM-DpT0rwVJ.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/chunk-CCU7O4O5-DjPcDqTJ.js
Normal file
1
assets/chunk-CCU7O4O5-DjPcDqTJ.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/chunk-EYG76IYJ-0wnl0jWc.js
Normal file
1
assets/chunk-EYG76IYJ-0wnl0jWc.js
Normal file
File diff suppressed because one or more lines are too long
13
assets/chunk-OMTJKCYW-CCUNQPi0.js
Normal file
13
assets/chunk-OMTJKCYW-CCUNQPi0.js
Normal file
File diff suppressed because one or more lines are too long
165
assets/chunk-P7EU7REX-CfiDT0A_.js
Normal file
165
assets/chunk-P7EU7REX-CfiDT0A_.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/chunk-T244DUNM-ROicv7Wv.js
Normal file
1
assets/chunk-T244DUNM-ROicv7Wv.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as a,W as g,p as s}from"./mermaid.esm.min-vSKPWR4X.js";var m=a((t,i,e,o)=>{t.attr("class",e);let{width:h,height:r,x:w,y:x}=n(t,i);g(t,r,h,o);let d=$(w,x,h,r,i);t.attr("viewBox",d),s.debug(`viewBox configured: ${d} with padding: ${i}`)},"setupViewPortForSVG"),n=a((t,i)=>{let e=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:e.width+i*2,height:e.height+i*2,x:e.x,y:e.y}},"calculateDimensionsWithPadding"),$=a((t,i,e,o,h)=>`${t-h} ${i-h} ${e} ${o}`,"createViewBox");export{m as y};
|
||||
1
assets/chunk-VSLJSFIP-gXPe0ly3.js
Normal file
1
assets/chunk-VSLJSFIP-gXPe0ly3.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as s}from"./mermaid.esm.min-vSKPWR4X.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},s(t,"ImperativeState"),t);export{e as s};
|
||||
1
assets/chunk-WONJCSFZ-m6vCJ9jO.js
Normal file
1
assets/chunk-WONJCSFZ-m6vCJ9jO.js
Normal file
@@ -0,0 +1 @@
|
||||
import{m as l,z as n,q as d,f as h}from"./mermaid.esm.min-vSKPWR4X.js";var i=d(h()),y=l((s,t)=>{let r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.name&&r.attr("name",t.name),t.rx&&r.attr("rx",t.rx),t.ry&&r.attr("ry",t.ry),t.attrs!==void 0)for(let a in t.attrs)r.attr(a,t.attrs[a]);return t.class&&r.attr("class",t.class),r},"drawRect"),o=l((s,t)=>{let r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};y(s,r).lower()},"drawBackgroundRect"),p=l((s,t)=>{let r=t.text.replace(n," "),a=s.append("text");a.attr("x",t.x),a.attr("y",t.y),a.attr("class","legend"),a.style("text-anchor",t.anchor),t.class&&a.attr("class",t.class);let e=a.append("tspan");return e.attr("x",t.x+t.textMargin*2),e.text(r),a},"drawText"),g=l((s,t,r,a)=>{let e=s.append("image");e.attr("x",t),e.attr("y",r);let x=(0,i.sanitizeUrl)(a);e.attr("xlink:href",x)},"drawImage"),f=l((s,t,r,a)=>{let e=s.append("use");e.attr("x",t),e.attr("y",r);let x=(0,i.sanitizeUrl)(a);e.attr("xlink:href",`#${x}`)},"drawEmbeddedImage"),m=l(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),w=l(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{f as E,g as d,w as f,o as g,m as h,y as x,p as y};
|
||||
15
assets/chunk-ZZTKAOFA-DbYRDN8h.js
Normal file
15
assets/chunk-ZZTKAOFA-DbYRDN8h.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import{m as e}from"./mermaid.esm.min-vSKPWR4X.js";var l=e(()=>`
|
||||
/* Font Awesome icon styling - consolidated */
|
||||
.label-icon {
|
||||
display: inline-block;
|
||||
height: 1em;
|
||||
overflow: visible;
|
||||
vertical-align: -0.125em;
|
||||
}
|
||||
|
||||
.node .label-icon path {
|
||||
fill: currentColor;
|
||||
stroke: revert;
|
||||
stroke-width: revert;
|
||||
}
|
||||
`,"getIconStyles");export{l as o};
|
||||
1
assets/classDiagram-FKO7XAE5-CXUhyZWM.js
Normal file
1
assets/classDiagram-FKO7XAE5-CXUhyZWM.js
Normal file
@@ -0,0 +1 @@
|
||||
import{V as t,Q as a,C as s,l as e}from"./chunk-P7EU7REX-CfiDT0A_.js";import"./chunk-ZZTKAOFA-DbYRDN8h.js";import"./chunk-6EQESGSB-D8MQkSSJ.js";import"./chunk-T244DUNM-ROicv7Wv.js";import{m as o}from"./mermaid.esm.min-vSKPWR4X.js";import"./app-CsTq_I9B.js";var c={parser:s,get db(){return new e},renderer:a,styles:t,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
||||
1
assets/classDiagram-v2-XZHHGUJO-CXUhyZWM.js
Normal file
1
assets/classDiagram-v2-XZHHGUJO-CXUhyZWM.js
Normal file
@@ -0,0 +1 @@
|
||||
import{V as t,Q as a,C as s,l as e}from"./chunk-P7EU7REX-CfiDT0A_.js";import"./chunk-ZZTKAOFA-DbYRDN8h.js";import"./chunk-6EQESGSB-D8MQkSSJ.js";import"./chunk-T244DUNM-ROicv7Wv.js";import{m as o}from"./mermaid.esm.min-vSKPWR4X.js";import"./app-CsTq_I9B.js";var c={parser:s,get db(){return new e},renderer:a,styles:t,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
||||
71
assets/component-Cneac3cR.js
Normal file
71
assets/component-Cneac3cR.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/cose-bilkent-AZ5BDB2T-m6TW_sp7.js
Normal file
1
assets/cose-bilkent-AZ5BDB2T-m6TW_sp7.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/dagre-X5LCLMGV-DZoMUJOt.js
Normal file
4
assets/dagre-X5LCLMGV-DZoMUJOt.js
Normal file
File diff suppressed because one or more lines are too long
24
assets/diagram-BZV4OSZQ-DAFeJbwg.js
Normal file
24
assets/diagram-BZV4OSZQ-DAFeJbwg.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import{c as B}from"./chunk-4KE642ED-D4iGNsEG.js";import{p as C}from"./treemap-KMMF4GRG-7ORZ52ND-CF-wf9MV.js";import{m as f,L as u,aN as P,W as z,p as w,H as W,U as F,j as S,e as D,$ as E,G as T,O as N,r as L,N as A}from"./mermaid.esm.min-vSKPWR4X.js";import"./chunk-OMTJKCYW-CCUNQPi0.js";import"./app-CsTq_I9B.js";var H=L.packet,m,$=(m=class{constructor(){this.packet=[],this.setAccTitle=W,this.getAccTitle=F,this.setDiagramTitle=S,this.getDiagramTitle=D,this.getAccDescription=E,this.setAccDescription=T}getConfig(){let t=u({...H,...N().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){A(),this.packet=[]}},f(m,"PacketDB"),m),R=1e4,j=f((e,t)=>{B(e,t);let r=-1,i=[],l=1,{bitsPerRow:n}=t.getConfig();for(let{start:a,end:s,bits:c,label:d}of e.blocks){if(a!==void 0&&s!==void 0&&s<a)throw new Error(`Packet block ${a} - ${s} is invalid. End must be greater than start.`);if(a??=r+1,a!==r+1)throw new Error(`Packet block ${a} - ${s??a} is not contiguous. It should start from ${r+1}.`);if(c===0)throw new Error(`Packet block ${a} is invalid. Cannot have a zero bit field.`);for(s??=a+(c??1)-1,c??=s-a+1,r=s,w.debug(`Packet block ${a} - ${r} with label ${d}`);i.length<=n+1&&t.getPacket().length<R;){let[p,o]=G({start:a,end:s,bits:c,label:d},l,n);if(i.push(p),p.end+1===l*n&&(t.pushWord(i),i=[],l++),!o)break;({start:a,end:s,bits:c,label:d}=o)}}t.pushWord(i)},"populate"),G=f((e,t,r)=>{if(e.start===void 0)throw new Error("start should have been set during first phase");if(e.end===void 0)throw new Error("end should have been set during first phase");if(e.start>e.end)throw new Error(`Block start ${e.start} is greater than block end ${e.end}.`);if(e.end+1<=t*r)return[e,void 0];let i=t*r-1,l=t*r;return[{start:e.start,end:i,label:e.label,bits:i-e.start},{start:l,end:e.end,label:e.label,bits:e.end-l}]},"getNextFittingBlock"),y={parser:{yy:void 0},parse:f(async e=>{let t=await C("packet",e),r=y.parser?.yy;if(!(r instanceof $))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");w.debug(t),j(t,r)},"parse")},M=f((e,t,r,i)=>{let l=i.db,n=l.getConfig(),{rowHeight:a,paddingY:s,bitWidth:c,bitsPerRow:d}=n,p=l.getPacket(),o=l.getDiagramTitle(),h=a+s,b=h*(p.length+1)-(o?0:a),k=c*d+2,g=P(t);g.attr("viewbox",`0 0 ${k} ${b}`),z(g,b,k,n.useMaxWidth);for(let[x,v]of p.entries())O(g,v,x,n);g.append("text").text(o).attr("x",k/2).attr("y",b-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),O=f((e,t,r,{rowHeight:i,paddingX:l,paddingY:n,bitWidth:a,bitsPerRow:s,showBits:c})=>{let d=e.append("g"),p=r*(i+n)+n;for(let o of t){let h=o.start%s*a+1,b=(o.end-o.start+1)*a-l;if(d.append("rect").attr("x",h).attr("y",p).attr("width",b).attr("height",i).attr("class","packetBlock"),d.append("text").attr("x",h+b/2).attr("y",p+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(o.label),!c)continue;let k=o.end===o.start,g=p-2;d.append("text").attr("x",h+(k?b/2:0)).attr("y",g).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(o.start),k||d.append("text").attr("x",h+b).attr("y",g).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(o.end)}},"drawWord"),Y={draw:M},U={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},V=f(({packet:e}={})=>{let t=u(U,e);return`
|
||||
.packetByte {
|
||||
font-size: ${t.byteFontSize};
|
||||
}
|
||||
.packetByte.start {
|
||||
fill: ${t.startByteColor};
|
||||
}
|
||||
.packetByte.end {
|
||||
fill: ${t.endByteColor};
|
||||
}
|
||||
.packetLabel {
|
||||
fill: ${t.labelColor};
|
||||
font-size: ${t.labelFontSize};
|
||||
}
|
||||
.packetTitle {
|
||||
fill: ${t.titleColor};
|
||||
font-size: ${t.titleFontSize};
|
||||
}
|
||||
.packetBlock {
|
||||
stroke: ${t.blockStrokeColor};
|
||||
stroke-width: ${t.blockStrokeWidth};
|
||||
fill: ${t.blockFillColor};
|
||||
}
|
||||
`},"styles"),K={parser:y,get db(){return new $},renderer:Y,styles:V};export{K as diagram};
|
||||
43
assets/diagram-DKYQLJNW-C7s-fkOn.js
Normal file
43
assets/diagram-DKYQLJNW-C7s-fkOn.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import{c as I}from"./chunk-4KE642ED-D4iGNsEG.js";import{p as S}from"./treemap-KMMF4GRG-7ORZ52ND-CF-wf9MV.js";import{m as o,G as E,$ as F,e as z,j as P,U as G,H as R,aN as D,N,L as v,O as w,r as j,p as B,aT as H}from"./mermaid.esm.min-vSKPWR4X.js";import"./chunk-OMTJKCYW-CCUNQPi0.js";import"./app-CsTq_I9B.js";var x={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},b={axes:[],curves:[],options:x},u=structuredClone(b),V=j.radar,W=o(()=>v({...V,...w().radar}),"getConfig"),C=o(()=>u.axes,"getAxes"),U=o(()=>u.curves,"getCurves"),_=o(()=>u.options,"getOptions"),Z=o(a=>{u.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),q=o(a=>{u.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:J(t.entries)}))},"setCurves"),J=o(a=>{if(a[0].axis==null)return a.map(e=>e.value);let t=C();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{let r=a.find(i=>i.axis?.$refText===e.name);if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),K=o(a=>{let t=a.reduce((e,r)=>(e[r.name]=r,e),{});u.options={showLegend:t.showLegend?.value??x.showLegend,ticks:t.ticks?.value??x.ticks,max:t.max?.value??x.max,min:t.min?.value??x.min,graticule:t.graticule?.value??x.graticule}},"setOptions"),Q=o(()=>{N(),u=structuredClone(b)},"clear"),f={getAxes:C,getCurves:U,getOptions:_,setAxes:Z,setCurves:q,setOptions:K,getConfig:W,clear:Q,setAccTitle:R,getAccTitle:G,setDiagramTitle:P,getDiagramTitle:z,getAccDescription:F,setAccDescription:E},X=o(a=>{I(a,f);let{axes:t,curves:e,options:r}=a;f.setAxes(t),f.setCurves(e),f.setOptions(r)},"populate"),Y={parse:o(async a=>{let t=await S("radar",a);B.debug(t),X(t)},"parse")},tt=o((a,t,e,r)=>{let i=r.db,n=i.getAxes(),l=i.getCurves(),s=i.getOptions(),c=i.getConfig(),d=i.getDiagramTitle(),p=D(t),g=et(p,c),h=s.max??Math.max(...l.map(y=>Math.max(...y.entries))),m=s.min,$=Math.min(c.width,c.height)/2;at(g,n,$,s.ticks,s.graticule),rt(g,n,$,c),M(g,n,l,m,h,s.graticule,c),k(g,l,s.showLegend,c),g.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),et=o((a,t)=>{let e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,i={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return a.attr("viewbox",`0 0 ${e} ${r}`).attr("width",e).attr("height",r),a.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),at=o((a,t,e,r,i)=>{if(i==="circle")for(let n=0;n<r;n++){let l=e*(n+1)/r;a.append("circle").attr("r",l).attr("class","radarGraticule")}else if(i==="polygon"){let n=t.length;for(let l=0;l<r;l++){let s=e*(l+1)/r,c=t.map((d,p)=>{let g=2*p*Math.PI/n-Math.PI/2,h=s*Math.cos(g),m=s*Math.sin(g);return`${h},${m}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),rt=o((a,t,e,r)=>{let i=t.length;for(let n=0;n<i;n++){let l=t[n].label,s=2*n*Math.PI/i-Math.PI/2;a.append("line").attr("x1",0).attr("y1",0).attr("x2",e*r.axisScaleFactor*Math.cos(s)).attr("y2",e*r.axisScaleFactor*Math.sin(s)).attr("class","radarAxisLine"),a.append("text").text(l).attr("x",e*r.axisLabelFactor*Math.cos(s)).attr("y",e*r.axisLabelFactor*Math.sin(s)).attr("class","radarAxisLabel")}},"drawAxes");function M(a,t,e,r,i,n,l){let s=t.length,c=Math.min(l.width,l.height)/2;e.forEach((d,p)=>{if(d.entries.length!==s)return;let g=d.entries.map((h,m)=>{let $=2*Math.PI*m/s-Math.PI/2,y=L(h,r,i,c),A=y*Math.cos($),O=y*Math.sin($);return{x:A,y:O}});n==="circle"?a.append("path").attr("d",T(g,l.curveTension)).attr("class",`radarCurve-${p}`):n==="polygon"&&a.append("polygon").attr("points",g.map(h=>`${h.x},${h.y}`).join(" ")).attr("class",`radarCurve-${p}`)})}o(M,"drawCurves");function L(a,t,e,r){let i=Math.min(Math.max(a,t),e);return r*(i-t)/(e-t)}o(L,"relativeRadius");function T(a,t){let e=a.length,r=`M${a[0].x},${a[0].y}`;for(let i=0;i<e;i++){let n=a[(i-1+e)%e],l=a[i],s=a[(i+1)%e],c=a[(i+2)%e],d={x:l.x+(s.x-n.x)*t,y:l.y+(s.y-n.y)*t},p={x:s.x-(c.x-l.x)*t,y:s.y-(c.y-l.y)*t};r+=` C${d.x},${d.y} ${p.x},${p.y} ${s.x},${s.y}`}return`${r} Z`}o(T,"closedRoundCurve");function k(a,t,e,r){if(!e)return;let i=(r.width/2+r.marginRight)*3/4,n=-(r.height/2+r.marginTop)*3/4,l=20;t.forEach((s,c)=>{let d=a.append("g").attr("transform",`translate(${i}, ${n+c*l})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(s.label)})}o(k,"drawLegend");var it={draw:tt},st=o((a,t)=>{let e="";for(let r=0;r<a.THEME_COLOR_LIMIT;r++){let i=a[`cScale${r}`];e+=`
|
||||
.radarCurve-${r} {
|
||||
color: ${i};
|
||||
fill: ${i};
|
||||
fill-opacity: ${t.curveOpacity};
|
||||
stroke: ${i};
|
||||
stroke-width: ${t.curveStrokeWidth};
|
||||
}
|
||||
.radarLegendBox-${r} {
|
||||
fill: ${i};
|
||||
fill-opacity: ${t.curveOpacity};
|
||||
stroke: ${i};
|
||||
}
|
||||
`}return e},"genIndexStyles"),nt=o(a=>{let t=H(),e=w(),r=v(t,e.themeVariables),i=v(r.radar,a);return{themeVariables:r,radarOptions:i}},"buildRadarStyleOptions"),lt=o(({radar:a}={})=>{let{themeVariables:t,radarOptions:e}=nt(a);return`
|
||||
.radarTitle {
|
||||
font-size: ${t.fontSize};
|
||||
color: ${t.titleColor};
|
||||
dominant-baseline: hanging;
|
||||
text-anchor: middle;
|
||||
}
|
||||
.radarAxisLine {
|
||||
stroke: ${e.axisColor};
|
||||
stroke-width: ${e.axisStrokeWidth};
|
||||
}
|
||||
.radarAxisLabel {
|
||||
dominant-baseline: middle;
|
||||
text-anchor: middle;
|
||||
font-size: ${e.axisLabelFontSize}px;
|
||||
color: ${e.axisColor};
|
||||
}
|
||||
.radarGraticule {
|
||||
fill: ${e.graticuleColor};
|
||||
fill-opacity: ${e.graticuleOpacity};
|
||||
stroke: ${e.graticuleColor};
|
||||
stroke-width: ${e.graticuleStrokeWidth};
|
||||
}
|
||||
.radarLegendText {
|
||||
text-anchor: start;
|
||||
font-size: ${e.legendFontSize}px;
|
||||
dominant-baseline: hanging;
|
||||
}
|
||||
${st(t,e)}
|
||||
`},"styles"),ht={parser:Y,db:f,renderer:it,styles:lt};export{ht as diagram};
|
||||
24
assets/diagram-LL6QPXA2-TyrSgzfz.js
Normal file
24
assets/diagram-LL6QPXA2-TyrSgzfz.js
Normal file
File diff suppressed because one or more lines are too long
60
assets/erDiagram-MBDK6S7D-CitxA5sF.js
Normal file
60
assets/erDiagram-MBDK6S7D-CitxA5sF.js
Normal file
File diff suppressed because one or more lines are too long
162
assets/flowDiagram-UML6HZQP-CcC1N519.js
Normal file
162
assets/flowDiagram-UML6HZQP-CcC1N519.js
Normal file
File diff suppressed because one or more lines are too long
267
assets/ganttDiagram-SAESIEWH-Bx_OWY7i.js
Normal file
267
assets/ganttDiagram-SAESIEWH-Bx_OWY7i.js
Normal file
File diff suppressed because one or more lines are too long
65
assets/gitGraphDiagram-JCGM6PWI-C5b9DR8Q.js
Normal file
65
assets/gitGraphDiagram-JCGM6PWI-C5b9DR8Q.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/index.html--BxQV4IC.js
Normal file
1
assets/index.html--BxQV4IC.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as t,o as a}from"./app-CsTq_I9B.js";const n={};function r(o,c){return a(),t("div")}const i=e(n,[["render",r]]),s=JSON.parse('{"path":"/blog/","title":"博客","lang":"zh-CN","frontmatter":{"lang":"zh-CN","title":"博客","gitInclude":[],"draft":true},"readingTime":{"minutes":0,"words":0},"git":{},"filePathRelative":null,"headers":[],"type":"blog"}');export{i as comp,s as data};
|
||||
3
assets/index.html-51zCMsyW.js
Normal file
3
assets/index.html-51zCMsyW.js
Normal file
File diff suppressed because one or more lines are too long
33
assets/index.html-5hngcaGY.js
Normal file
33
assets/index.html-5hngcaGY.js
Normal file
@@ -0,0 +1,33 @@
|
||||
import{_ as i,c as a,a as e,o as n}from"./app-CsTq_I9B.js";const l={};function h(t,s){return n(),a("div",null,[...s[0]||(s[0]=[e(`<h2 id="第一部分-区块链平台运维" tabindex="-1"><a class="header-anchor" href="#第一部分-区块链平台运维"><span>第一部分:区块链平台运维</span></a></h2><h3 id="第1题-完成-fisco-bcos-区块链系统部署并验证" tabindex="-1"><a class="header-anchor" href="#第1题-完成-fisco-bcos-区块链系统部署并验证"><span>第1题:完成 FISCO BCOS 区块链系统部署并验证</span></a></h3><p><strong>【要求】</strong></p><p>登录 Linux 服务器,完成节点部署、启动、将过程结果截图,保存至做答题并点击提交。</p><p><strong>【任务】</strong></p><p>登录 Linux 服务器,进入指定操作目录(/root/tools)基于开发部署工具 build_chain.sh 脚本在本地搭建一条 4 节点的 FISCO BCOS 链。起始端口号为:30300,20200,8545。将节点 2 的端口号改为 30500,20400,8675。确保搭建的区块链系统能正常运行,并将执行的命令和完整的命令执行结果截图保存至作答区并点击提交。具体任务如下:</p><p><strong>【参考答案】</strong></p><p>使用 build_chain.sh 脚本搭建 FISCO BCOS 链:</p><p>默认的 -v 会从网络中下载 FISCO BCOS,这里本地已经有了,比赛的时候肯定是断网的,这里直接调用本地的即可</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">bash</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build_chain.sh</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -l</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">127.0.0.1:4</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -p</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 30300,20200,8545</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -e</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ./fisco-bcos</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><img src="https://image.simengweb.com/blog/competition/BRICS2025-ST-132/20250930201715_253_27.png" alt="配置默认单机4节点"> 在创建完成之后,当前目录会出现一个 nodes 文件夹,这里面就是我们的每个节点的具体配置信息等等</p><p>这里推荐下载一个 tree 用来查看目录结构</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">apt</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> install</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> tree</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">tree</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> nodes</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p>目录结构应该大概如下:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>nodes</span></span>
|
||||
<span class="line"><span>├── 127.0.0.1</span></span>
|
||||
<span class="line"><span>│ ├── node0</span></span>
|
||||
<span class="line"><span>│ │ ├── ...</span></span>
|
||||
<span class="line"><span>│ ├── node1</span></span>
|
||||
<span class="line"><span>│ │ ├── ...</span></span>
|
||||
<span class="line"><span>│ ├── node2</span></span>
|
||||
<span class="line"><span>│ │ ├── ...</span></span>
|
||||
<span class="line"><span>│ ├── node3</span></span>
|
||||
<span class="line"><span>│ │ ├── ...</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>每个 node 文件夹都包含 <code>conf/</code>(配置文件),<code>log/</code>(日志文件),<code>fisco-bcos/</code>(二进制副本)</p><p>修改节点2的端口,根据要求修改为 30500,20400,8675</p><p>编辑配置文件:<code>vim nodes/127.0.0.1/node2/config.ini</code></p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark has-diff vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">rpc</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span></span>
|
||||
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> channel_listen_ip</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">0.0.0.0</span></span>
|
||||
<span class="line diff remove"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> channel_listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">20202</span></span>
|
||||
<span class="line diff add"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> channel_listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">20400</span></span>
|
||||
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> jsonrpc_listen_ip</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">127.0.0.1</span></span>
|
||||
<span class="line diff remove"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> jsonrpc_listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">8547</span></span>
|
||||
<span class="line diff add"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> jsonrpc_listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">8675</span></span>
|
||||
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> disable_dynamic_group</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">false</span></span>
|
||||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">p2p</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span></span>
|
||||
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> listen_ip</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">0.0.0.0</span></span>
|
||||
<span class="line diff remove"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">30302</span></span>
|
||||
<span class="line diff add"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> listen_port</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">30500</span></span>
|
||||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> ;</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> nodes</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> to</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> connect</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> node.0</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">=127.0.0.1:30300</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> node.1</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">=127.0.0.1:30301</span></span>
|
||||
<span class="line diff remove"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> node.2</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">=127.0.0.1:30302</span></span>
|
||||
<span class="line diff add"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> node.2</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">=127.0.0.1:30500</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> node.3</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">=127.0.0.1:30303</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>不光节点2的 [p2p] 的 <code>node.2</code> 需要修改,其他几个节点的都需要进行修改</p><p>切换到 <code>nodes/127.0.0.1/</code> 目录下,通过 <code>bash start_all.sh</code> 启动所有节点</p><p><img src="https://image.simengweb.com/blog/competition/BRICS2025-ST-132/20250930205309_254_27.png" alt="启动所有节点"></p><p>验证端口是否生效:<code>ss -tuln | grep -E '30500|20400|8675'</code></p><p>预期输出如下:</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">tcp</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> LISTEN</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 4096</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 127.0.0.1:8675</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 0.0.0.0:</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">*</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">tcp</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> LISTEN</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 4096</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 0.0.0.0:30500</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 0.0.0.0:</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">*</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">tcp</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> LISTEN</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 4096</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 0.0.0.0:20400</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 0.0.0.0:</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">*</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>主要参考文章如下:</p><ol><li><a href="https://fisco-doc.readthedocs.io/zh/latest/docs/installation.html" target="_blank" rel="noopener noreferrer">搭建第一个区块链网络</a></li><li><a href="https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/manual/build_chain.html" target="_blank" rel="noopener noreferrer">开发部署工具(build_chain.sh)</a></li></ol><h3 id="第2题-按要求完成webase-node-manager的安装与部署" tabindex="-1"><a class="header-anchor" href="#第2题-按要求完成webase-node-manager的安装与部署"><span>第2题:按要求完成WeBASE-Node-Manager的安装与部署</span></a></h3><p><strong>【要求】</strong></p><p>登录 Linux 服务器,部署节点管理平台,并将部署、启动、应用过程结果截图,保存至作答区并点击提交。</p><p><strong>【任务】</strong></p><p>登录 linux 服务器,进入指定操作目录(/root/tools/webase)中完成区块链一体化管理平台的配置部署,并检查是否安装成功,具体操作任务如下:</p><ol><li>进入 WeBASE-Node-Manager 目录,完成数据库初始化操作;</li><li>修改 application.yml 配置文件,进行 WeBASE-Node-Manager 的服务配置,包括数据库名称,数据库用户,数据库密码等;</li><li>使用命令启动 WeBASE-Node-Manager 管理平台服务,并检查节点管理是否正常启动;</li><li>使用 swagger 对节点管理服务的 API 接口测试。</li></ol><p><strong>【参考答案】</strong></p><p>切换到 WeBASE-Front 目录下,将 <code>dist/conf_template</code> 配置文件目录复制一份作为配置文件,命名为 <code>dist/conf</code></p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 当前工作目录为:/home/simeng/blockchain/WeBASE-Front</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cp</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -r</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> dist/conf_template</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> dist/conf</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p>将节点所在目录 <code>nodes/{$ip}/sdk</code> 下的所有文件拷贝到当前的 <code>dist/conf</code> 目录下</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cp</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ../nodes/127.0.0.1/sdk/</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">*</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ./dist/conf/</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>编辑配置文件 : <code>vim dist/conf/application.yml</code></p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>配置环境变量 JAVA_HOME 编辑配置文件:<code>~/.bashrc</code>,添加如下内容</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> JAVA_HOME</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">/usr/lib/jvm/java-1.8.0-openjdk-amd64</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> PATH</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">$JAVA_HOME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">/</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">bin</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">:</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">$PATH</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p>刷新环境变量</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">source</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ~/.bashrc</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>切换到 <code>dist</code> 目录下,拉取 Solidity 开发工具 v0.8.11.js(这一步可能会很慢,建议直接把 v0.8.11.js 下载到本地,然后直接放到对应目录,WSL2 的机器是直接挂载在 Windows 上的,Windows 可以直接操作)</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">wget</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> https://github.com/WeBankBlockchain/WeBASELargeFiles/releases/download/v3.0.0/v0.8.11.js</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -O</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> static/static/js/v0.8.11.js</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>运行 <code>bash start.sh</code> 启动 WeBASE-Node-Manager 管理平台服务</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 当前工作目录为:/home/simeng/blockchain/WeBASE-Front/dist</span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">bash</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> start.sh</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p>由于 localhostForwarding 机制(具体参考:<a href="https://notes.simengweb.com/article/operate-wsl2/#%E7%BD%91%E7%BB%9C%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE" target="_blank" rel="noopener noreferrer">配置WSL2资源</a>),我们可以直接通过localhost来访问WSL2容器的端口的服务 访问:<a href="http://localhost:5002/WeBASE-Front" target="_blank" rel="noopener noreferrer">http://localhost:5002/WeBASE-Front</a></p>`,49)])])}const p=i(l,[["render",h]]),k=JSON.parse('{"path":"/article/2025-BR-BRICS-BC-App-Develop-Op-Sample-Q_A/","title":"2025 一带一路金砖 - 区块链应用开发与运维 样题详解","lang":"zh-CN","frontmatter":{"title":"2025 一带一路金砖 - 区块链应用开发与运维 样题详解","createTime":"2025/09/30 19:57:14","permalink":"/article/2025-BR-BRICS-BC-App-Develop-Op-Sample-Q&A/"},"readingTime":{"minutes":3.72,"words":1117},"git":{"createdTime":1759303270000,"updatedTime":1761565115000,"contributors":[{"name":"si-meng-spec","username":"si-meng-spec","email":"simeng@simengweb.com","commits":2,"avatar":"https://avatars.githubusercontent.com/si-meng-spec?v=4","url":"https://github.com/si-meng-spec"},{"name":"祀梦","username":"","email":"3501646051@qq.com","commits":1,"avatar":"https://gravatar.com/avatar/6406a81eeddc359cf3d3ce018797689fc6d014ff06215c27d0210b42e8f5a8ab?d=retro"}]},"filePathRelative":"blog/competition/BRICS2025-ST-132.md","headers":[],"_e":"$2b$13$CnmbjqzZPll8mDk9AlqYFOVVv1xaipyql.Rk6pEL8ZXwc59rzqfqC","categoryList":[{"id":"126ac9","sort":10000,"name":"blog"},{"id":"83ee8d","sort":10002,"name":"competition"}]}');export{p as comp,k as data};
|
||||
12
assets/index.html-9ZeCOgBb.js
Normal file
12
assets/index.html-9ZeCOgBb.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/index.html-BEbCaspR.js
Normal file
1
assets/index.html-BEbCaspR.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as r,c as a,a as n,o as t}from"./app-CsTq_I9B.js";const o={};function l(i,e){return t(),a("div",null,[...e[0]||(e[0]=[n('<p>以下是我平时工作和学习中经常使用的一些Web工具,分享给大家:</p><h2 id="开发工具" tabindex="-1"><a class="header-anchor" href="#开发工具"><span>开发工具</span></a></h2><ul><li><a href="https://it-tools.simengweb.com/" target="_blank" rel="noopener noreferrer">面向开发人员的便捷工具</a> - 一个比较好的工具箱</li><li><a href="https://visualgo.net/zh" target="_blank" rel="noopener noreferrer">算法可视化工具 - Visualgo</a> - 算法和数据结构可视化学习平台</li><li><a href="https://quickref.cn/" target="_blank" rel="noopener noreferrer">程序员速查手册</a> - 程序员常用开发知识速查</li><li><a href="https://jupyter.org/try-jupyter/lab/" target="_blank" rel="noopener noreferrer">Jupyter在线环境</a> - 在线Jupyter笔记本环境,支持多种编程语言</li></ul><h2 id="设计工具" tabindex="-1"><a class="header-anchor" href="#设计工具"><span>设计工具</span></a></h2><ul><li><a href="https://www.iconfont.cn/" target="_blank" rel="noopener noreferrer">iconfont-阿里巴巴矢量图标库</a> - 阿里妈妈MUX倾力打造的矢量图标管理、交流平台</li></ul><h2 id="教育的平台" tabindex="-1"><a class="header-anchor" href="#教育的平台"><span>教育的平台</span></a></h2><ul><li><a href="https://www.icourse163.org/" target="_blank" rel="noopener noreferrer">中国大学MOOC</a> - 国内优质在线课程平台</li><li><a href="https://www.xuetangx.com/" target="_blank" rel="noopener noreferrer">学堂在线</a> - 清华大学发起的大规模开放在线教育平台</li><li><a href="https://www.geogebra.org/" target="_blank" rel="noopener noreferrer">GeoGebra</a> - 数学教学与学习的动态几何软件</li><li><a href="https://noobdream.com/index/" target="_blank" rel="noopener noreferrer">编程学习平台</a> - 编程学习资源与算法题库</li></ul><h2 id="在线工具" tabindex="-1"><a class="header-anchor" href="#在线工具"><span>在线工具</span></a></h2><ul><li><a href="https://www.jyshare.com/" target="_blank" rel="noopener noreferrer">极简工具 - Jyshare</a> - 提供各种在线实用工具的平台</li><li><a href="https://onlineconvertfree.com/zh/" target="_blank" rel="noopener noreferrer">在线文件转换</a> - 免费在线文件格式转换工具</li><li><a href="https://tk.enncy.cn/" target="_blank" rel="noopener noreferrer">工具库 - Enncy</a> - 实用工具集合</li></ul><h2 id="资源平台" tabindex="-1"><a class="header-anchor" href="#资源平台"><span>资源平台</span></a></h2><ul><li><a href="https://z-lib.life/" target="_blank" rel="noopener noreferrer">Z-Library</a> - 电子书资源库</li></ul><h2 id="自己常玩的一些游戏攻略" tabindex="-1"><a class="header-anchor" href="#自己常玩的一些游戏攻略"><span>自己常玩的一些游戏攻略</span></a></h2><ul><li><a href="https://wiki.biligame.com/blhx/%E5%A4%A7%E5%9E%8B%E4%BD%9C%E6%88%98%E6%88%90%E5%B0%B1%E8%AE%B0%E5%BD%95%E5%9C%B0%E5%9B%BE" target="_blank" rel="noopener noreferrer">碧蓝航线WIKI大型作战成就记录地图</a> - 碧蓝航线大型作战成就记录地图</li><li><a href="https://bb.heiyu100.cn/shuju.aspx" target="_blank" rel="noopener noreferrer">海岛奇兵数据大全</a> - 海岛奇兵升级数据、设施、游戏数据查询</li><li><a href="https://www.chunkbase.com/apps/seed-map#seed=-7426240975919748310&platform=java_1_20&dimension=overworld&x=-119&z=881&zoom=0.27" target="_blank" rel="noopener noreferrer">Minecraft种子地图工具</a> - Minecraft种子地图查看工具</li><li><a href="https://yqqs.huijiwiki.com/wiki/%E9%A6%96%E9%A1%B5" target="_blank" rel="noopener noreferrer">元气骑士中文维基</a> - 元气骑士游戏中文维基百科</li></ul>',13)])])}const h=r(o,[["render",l]]),p=JSON.parse('{"path":"/tools/","title":"常用Web工具","lang":"zh-CN","frontmatter":{"title":"常用Web工具","description":"一些我常用的在线工具集合","hideInBlogList":true,"article":false,"createTime":"2025/09/22 07:45:30","permalink":"/tools/"},"readingTime":{"minutes":1.68,"words":503},"git":{"createdTime":1758542924000,"updatedTime":1758542924000,"contributors":[{"name":"simeng","username":"","email":"simeng@simengweb.com","commits":1,"avatar":"https://gravatar.com/avatar/0d358b828946f71c617d26b8c881331619abfbbab3bf694ea3f0eb3909110815?d=retro"}]},"filePathRelative":"tools.md","headers":[],"categoryList":[]}');export{h as comp,p as data};
|
||||
13
assets/index.html-BKss3LAJ.js
Normal file
13
assets/index.html-BKss3LAJ.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import{_ as i,c as e,a,o as n}from"./app-CsTq_I9B.js";const l={};function t(h,s){return n(),e("div",null,[...s[0]||(s[0]=[a(`<h2 id="console-控制台是什么" tabindex="-1"><a class="header-anchor" href="#console-控制台是什么"><span>Console 控制台是什么?</span></a></h2><p>Console 是 FISCO BCOS 官方提供的一个交互式命令行工具,用于直接与区块链节点交互。 主要功能包括:</p><ul><li>查询区块链状态(如区块链高度、节点列表、群组信息)</li><li>部署和调用智能合约(支持 Solidity)</li><li>管理节点(如查看节点共识状态、动态添加节点)</li><li>调试交易和查看回执</li></ul><h2 id="部署-console-控制台" tabindex="-1"><a class="header-anchor" href="#部署-console-控制台"><span>部署 Console 控制台</span></a></h2><p>获取下载脚本:<code>wget https://gitee.com/FISCO-BCOS/console/releases/download/v2.8.0/console.tar.gz</code> 解压控制台安装包:<code>tar -zxf console.tar.gz console/</code></p><p>复制配置文件:<code>cp conf/config-example.toml conf/config.toml</code> 编辑配置文件:<code>vim conf/config.toml</code></p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark has-highlighted vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># enSslKey = "conf/gm/gmensdk.key" # GM ssl cert file path</span></span>
|
||||
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # default load the GM SSL encryption privateKey from \${certPath}/gm/gmensdk.key</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">network</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span></span>
|
||||
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 请确保这里的连接地址都有节点</span></span>
|
||||
<span class="line highlighted warning"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">peers</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">[</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">127.0.0.1:20200</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">,</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">127.0.0.1:20201</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">] </span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># The peer list to connect</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># Configure a private topic as a topic message sender.</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>复制节点证书到 Console 的配置目录下</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cp</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -r</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ../nodes/127.0.0.1/sdk/</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">*</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> conf/</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>通过 <code>bash start.sh</code> 就可以启动 Console 控制台啦! <img src="https://image.simengweb.com/notes/ops/blockchain/practice/console-operator/2025-10-03-161500.png" alt="启动Console控制台"></p><h2 id="常用控制台命令" tabindex="-1"><a class="header-anchor" href="#常用控制台命令"><span>常用控制台命令</span></a></h2><p>这里的区块链的搭建是根据前一篇文章中的多机构多群组多节点的关系</p><h3 id="合约相关命令" tabindex="-1"><a class="header-anchor" href="#合约相关命令"><span>合约相关命令</span></a></h3><h3 id="其他命令" tabindex="-1"><a class="header-anchor" href="#其他命令"><span>其他命令</span></a></h3><ul><li>查询区块高度:<code>getBlockNumber</code></li></ul><div class="code-block-title" data-title="output_example"><div class="code-block-title-bar"><span class="title">output_example</span></div><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">group:1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">></span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> getBlockNumber </span></span>
|
||||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">0</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div></div><ul><li>查看共识节点列表:<code>getSealerList</code></li></ul><div class="code-block-title" data-title="output_example"><div class="code-block-title-bar"><span class="title">output_example</span></div><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">group:1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">></span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> getSealerList </span></span>
|
||||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span></span>
|
||||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> d036a22f16909cba4c8521cd3c31db3be381e673c9749e3fd2848ab25eca134ef917cb9306f41893295c535078bce77bdc241eba3f92549a73efe4699d3c0df8,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> f0535616759000b473a285d60814bc2c5927a9cb897644da46890de71e59df590cd6fe1b226a95e19a566b6fc127fd85032de0d9fdd3d529e5e50cd96ad51f28</span></span>
|
||||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div>`,18)])])}const p=i(l,[["render",t]]),c=JSON.parse('{"path":"/ops/blockchain/practice/console-operator/","title":"Console 控制台操作","lang":"zh-CN","frontmatter":{"title":"Console 控制台操作","createTime":"2025/10/03 02:55:49","permalink":"/ops/blockchain/practice/console-operator/"},"readingTime":{"minutes":1.15,"words":344},"git":{"createdTime":1759656932000,"updatedTime":1759656932000,"contributors":[{"name":"si-meng-spec","username":"si-meng-spec","email":"simeng@simengweb.com","commits":1,"avatar":"https://avatars.githubusercontent.com/si-meng-spec?v=4","url":"https://github.com/si-meng-spec"}]},"filePathRelative":"notes/ops/blockchain/practice/console-operator.md","headers":[]}');export{p as comp,c as data};
|
||||
1
assets/index.html-BP4IwfJx.js
Normal file
1
assets/index.html-BP4IwfJx.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/index.html-BR0Y_5Dd.js
Normal file
1
assets/index.html-BR0Y_5Dd.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as a,c as t,a as n,o as r}from"./app-CsTq_I9B.js";const o={};function s(c,e){return r(),t("div",null,[...e[0]||(e[0]=[n('<h2 id="区块链简介" tabindex="-1"><a class="header-anchor" href="#区块链简介"><span>区块链简介</span></a></h2><p>区块链就像是一本神奇的共享账本哦~它由许许多多的"区块"连接而成,每个区块里都记录着各种交易信息~最特别的是,这本账本不是由某一个人或组织保管的,而是由网络里的所有人一起维护呢~</p><p>想象一下,当有新的交易发生时,网络里的每个人都会收到一份拷贝,大家一起验证这份交易的真实性,然后把它添加到账本里~这样一来,就没有人能够偷偷篡改账本啦~是不是很神奇呢~♪</p><p>区块链还有一个超棒的特点哦~它不需要中间人的帮忙,就能让互不相识的人们安全地进行交易~就像魔法一样,让信任在数字世界里自然生长~</p><h2 id="区块链的理论基础" tabindex="-1"><a class="header-anchor" href="#区块链的理论基础"><span>区块链的理论基础</span></a></h2><p>呜呜~在网上找关于完整区块链原理的资料好难呀,现在就只看到一些比较基础的课程和书籍呢。</p><p>嘿嘿,在B站的话,发现有一个课程超棒哒,就是肖臻老师的<a href="https://www.bilibili.com/video/BV1Vt411X7JF/" target="_blank" rel="noopener noreferrer">《区块链技术与应用》</a>呢!</p><p>在Youtube上也可以去看看<a href="https://www.youtube.com/@BinanceAcademy" target="_blank" rel="noopener noreferrer">Binance Academy</a>的视频哟,感觉也很不错哒!</p><p>至于书籍嘛,目前还没找到特别好的,不过没关系,会继续努力找找哒!如果有好的课程的话,可以评论留言分享一下哦~</p><h2 id="区块链的运维实践" tabindex="-1"><a class="header-anchor" href="#区块链的运维实践"><span>区块链的运维实践</span></a></h2><p>嘿嘿~区块链的搭建呀,主要就是通过 <a href="https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/introduction.html" target="_blank" rel="noopener noreferrer">FISCO BCOS</a> 来实现哒!</p><p>它呢,是一个开源的、基于Java的区块链平台哟~还支持智能合约的部署和执行呢,超厉害的!</p>',12)])])}const p=a(o,[["render",s]]),h=JSON.parse('{"path":"/ops/blockchain/","title":"区块链运维指南","lang":"zh-CN","frontmatter":{"title":"区块链运维指南","createTime":"2025/09/28 07:54:17","permalink":"/ops/blockchain/"},"readingTime":{"minutes":1.54,"words":461},"git":{"createdTime":1759061001000,"updatedTime":1759391780000,"contributors":[{"name":"si-meng-spec","username":"si-meng-spec","email":"simeng@simengweb.com","commits":3,"avatar":"https://avatars.githubusercontent.com/si-meng-spec?v=4","url":"https://github.com/si-meng-spec"}]},"filePathRelative":"notes/ops/blockchain/README.md","headers":[]}');export{p as comp,h as data};
|
||||
1
assets/index.html-BY6C8TYK.js
Normal file
1
assets/index.html-BY6C8TYK.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as t,o as a}from"./app-CsTq_I9B.js";const r={};function n(o,c){return a(),t("div")}const s=e(r,[["render",n]]),l=JSON.parse('{"path":"/blog/categories/","title":"分类","lang":"zh-CN","frontmatter":{"lang":"zh-CN","title":"分类","gitInclude":[],"draft":true},"readingTime":{"minutes":0,"words":0},"git":{},"filePathRelative":null,"headers":[],"type":"blog-categories"}');export{s as comp,l as data};
|
||||
1
assets/index.html-BYzSy3wC.js
Normal file
1
assets/index.html-BYzSy3wC.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,c as i,a as r,o as l}from"./app-CsTq_I9B.js";const s={};function n(t,a){return l(),i("div",null,[...a[0]||(a[0]=[r('<p>这里是我在学习C++编程语言过程中记录的学习心得、基础知识和实战经验。通过整理这些笔记,希望能够帮助自己和他人更好地掌握C++这门强大的编程语言。</p><h2 id="学习路径" tabindex="-1"><a class="header-anchor" href="#学习路径"><span>学习路径</span></a></h2><p>C++是一门复杂而强大的编程语言,学习路径建议如下:</p><ol><li><strong>基础语法</strong> - 掌握C++的基本语法和编程概念</li><li><strong>面向对象编程</strong> - 学习C++的类、继承、多态等OOP特性</li><li><strong>STL标准库</strong> - 熟悉常用的容器和算法</li><li><strong>高级特性</strong> - 模板、异常处理、智能指针等</li><li><strong>实战项目</strong> - 通过实际项目巩固所学知识</li></ol><h2 id="笔记分类" tabindex="-1"><a class="header-anchor" href="#笔记分类"><span>笔记分类</span></a></h2><h3 id="基础语法" tabindex="-1"><a class="header-anchor" href="#基础语法"><span>基础语法</span></a></h3><ul><li>数据类型</li><li>运算符和表达式</li><li>控制流语句</li><li>函数</li></ul><h3 id="面向对象编程" tabindex="-1"><a class="header-anchor" href="#面向对象编程"><span>面向对象编程</span></a></h3><ul><li>类和对象</li><li>继承与多态</li><li>封装与抽象</li><li>构造函数与析构函数</li></ul><h3 id="stl标准库" tabindex="-1"><a class="header-anchor" href="#stl标准库"><span>STL标准库</span></a></h3><ul><li>容器(vector, list, map等)</li><li>迭代器</li><li>算法</li><li>函数对象</li></ul><h2 id="学习资源推荐" tabindex="-1"><a class="header-anchor" href="#学习资源推荐"><span>学习资源推荐</span></a></h2><ul><li><a href="https://101su.ru/book/5442395/430bc1/c-primer-plus%E4%B8%AD%E6%96%87%E7%89%88%E7%AC%AC%E5%85%AD%E7%89%88.html" target="_blank" rel="noopener noreferrer">C++ Primer Plus:中文版(第六版)</a> - 很好的C++入门教材</li></ul><p>开始你的C++学习之旅吧!坚持学习,你会发现C++的魅力所在!</p>',14)])])}const p=e(s,[["render",n]]),c=JSON.parse('{"path":"/programming/cplusplus/","title":"C++ 学习笔记","lang":"zh-CN","frontmatter":{"title":"C++ 学习笔记","description":"记录C++编程语言的学习心得和基础知识","createTime":"2025/09/22 09:00:00","permalink":"/programming/cplusplus/"},"readingTime":{"minutes":1.19,"words":356},"git":{"createdTime":1758547422000,"updatedTime":1758547422000,"contributors":[{"name":"simeng","username":"","email":"simeng@simengweb.com","commits":1,"avatar":"https://gravatar.com/avatar/0d358b828946f71c617d26b8c881331619abfbbab3bf694ea3f0eb3909110815?d=retro"}]},"filePathRelative":"notes/programming/c++/README.md","headers":[]}');export{p as comp,c as data};
|
||||
1
assets/index.html-B_rdowog.js
Normal file
1
assets/index.html-B_rdowog.js
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user