chainlesschain 0.161.12 → 0.162.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-B1dwBvzW.js → AIOps-Dn8q-Cu4.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DfR4oLvh.js → ActionButton-BePEVs4O.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D3ZYGXjr.js → Analytics-CKp-5Gi0.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-CsmOoh-7.js → AppLayout-BSudqld0.js} +2 -2
- package/src/assets/web-panel/assets/{Audit-B4gwDm63.js → Audit-iefpSeRG.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-T42uSArV.js → Backup-Ce43ZIhD.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CFi52nMs.js → BaseInput-BvGiwRav.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D7Vvok1V.js → Chat-BAaQg-Oc.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-Dwaflpww.js → Checkbox-Dvn8uxKO.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BIqx3G0b.js → Codegen-CTcZCayj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DzIUYUNu.js → Col-CBFpGgb5.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DKePtzhk.js → Community-DmCYaV9M.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CirVV9Wq.js → Compact-DnOD5uMF.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CrXOr0sy.js → Compliance-u53e9lg-.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BEBP6Tht.js → Cowork-CL5ohuXH.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-k7nNUuqh.js → Cron-DubcmRgt.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-CBnX0Dhq.js → Crosschain-BWXcUXc3.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B48FszWS.js → DID-Cw0i8WjE.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-Pb3qfFpp.js → Dashboard-BbofvIWH.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-pUHy4CQ2.js → Dropdown-DN6ur5xV.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CT0Qs-kR.js → Federation-CA-rIdkY.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CbJJp5BR.js → FormItemContext-D_HGU4aA.js} +1 -1
- package/src/assets/web-panel/assets/{Git-B3mGNLQe.js → Git-CBWFs6Uk.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-BKf4733q.js → Governance-Cx6PTC43.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DZjU541G.js → Inference-Ubk1VstS.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C8L-7Dd1.js → KnowledgeGraph-DTB10MYO.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CwDwOiKv.js → Logs-Tfk4FBVC.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-C2YWWU0M.js → Marketplace-BAsztG4O.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-dIbkOypF.js → McpTools-DliPfvuK.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-7eF8WzcY.js → Memory-hkw6Xwyv.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-C74GHLbX.js → MobileBridge-eeNMFGj6.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CSEDo5Fo.js → Mtc-BP3Riowm.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-DiJXxOrB.js → MtcAudit-DvD7pE7V.js} +1 -1
- package/src/assets/web-panel/assets/Multisig-CPtc-fVL.js +7 -0
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
- package/src/assets/web-panel/assets/{NLProgramming-DjF-gIUw.js → NLProgramming-1y__Epjg.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BUE5CvMO.js → Notes-CEvJqMP8.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-Dfbrobje.js → NotificationSettings-wmCYm99r.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-C6YvqjQB.js → Organization-CSoz8gGr.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-BvHNhdMR.js → Overflow-kf1mnFrM.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BO0hQHFS.js → P2P-C4GfXJ8Z.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-CCPlrJeP.js → Permissions-CW1Mn95X.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-DTCL3FjJ.js → Pipeline-CM1ppddn.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-08DYgOe_.js → Privacy-DuAY5fEm.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B7j-Z8sa.js → ProjectInit-C72779b6.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-CFqLhV1w.js → ProjectSettings-CAilXWam.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-BPlpx2UN.js → Projects-DTIlVTkF.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BCBPbVbF.js → Providers-Cf6Yv8bu.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C8Job6zl.js → QuickAsk-CK1_VVzw.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DOV_Aje-.js → Recommend-QBC7KgvR.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DOgK_dIK.js → Reputation-ju6lWzMM.js} +1 -1
- package/src/assets/web-panel/assets/{Row-8jdU1xYg.js → Row-DQwipGEm.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B289OgNZ.js → RssFeed-DkLGmeLW.js} +1 -1
- package/src/assets/web-panel/assets/{Search-cr0AndFE.js → Search-YYhitzkt.js} +1 -1
- package/src/assets/web-panel/assets/{Security-w4diykaE.js → Security-DEllaBqe.js} +1 -1
- package/src/assets/web-panel/assets/{Services-dTxAI5cG.js → Services-BgPHBq9S.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-B3FiUiRo.js → Skeleton-DHEyJI7c.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DgtBTAFC.js → Skills-c212vgf3.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-B4Y6bvbL.js → Sla-COqhw_no.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-C8FEvArc.js → SpeechSettings-Bmds06su.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CHvV5L0m.js → SyncSettings-Bx1_A34Y.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-B4Py5ORS.js → Tasks-B0Lo_9aN.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-MeTyXM5u.js → Templates-D0RcpfuW.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-Doiz7wyQ.js → Tenant-G0yVctLy.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DSEAdwWN.js → Terminal-DqgLtK3c.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BBrtaEKt.js → Tokens-Cdt0aqCc.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-nPvjho27.js → Trigger-DFbfZFuJ.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BFwPyS_6.js → Trust-BQXsWPz6.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DFsHoY1J.js → UkeySign-DBem5Xkj.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-FkSKqHE9.js → VideoEditing-B1yipKKv.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-AXo-_4-w.js → Wallet-iPJtU5QZ.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-DoScnQ-4.js → WebAuthn-HLb9srUL.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-IEMfIax-.js → WorkflowEditor-BSqXL8GD.js} +1 -1
- package/src/assets/web-panel/assets/{chat-pc1ciH6T.js → chat-D_J-ZVBh.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CjkIkB0e.js → colors-B126JcB4.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CQZnkP5p.js → compact-item-Bw5EEKw4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B1McGnV-.js → createContext-xLJXI46O.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-CbkA6peP.js → hasIn-K8QCNlyy.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChCCGHwz.js → index-85lab9HJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYAWIXFt.js → index-B9ztiTnX.js} +1 -1
- package/src/assets/web-panel/assets/index-BEYypR_d.js +1 -0
- package/src/assets/web-panel/assets/{index-wwQ_ZkWN.js → index-BQ_NIMQS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNLeseG1.js → index-BSgvvXgq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcSe5y5O.js → index-BWUG9yVI.js} +1 -1
- package/src/assets/web-panel/assets/{index-uWvLy_3T.js → index-B_PqXUkT.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJr12ypE.js → index-BaXXyyT0.js} +1 -1
- package/src/assets/web-panel/assets/{index-NRWBOo4F.js → index-Bptjq-wQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dzfj71tf.js → index-BsbKjK1o.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMjPzhsp.js → index-Bv9odL87.js} +1 -1
- package/src/assets/web-panel/assets/{index-5c4JzwY3.js → index-C2CgD7TN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzZ3LxPK.js → index-COCq6xuZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dn7SHV2e.js → index-CVeuzjxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGb36exe.js → index-CWBajOcE.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5mpCgak.js → index-CvAey6iD.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKledOCh.js → index-DFPVNSby.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8r6OBuk.js → index-DFwF_JeQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjxVsyn_.js → index-DLZZi1Km.js} +1 -1
- package/src/assets/web-panel/assets/{index-DPzT5L14.js → index-DY5Oc3z6.js} +3 -3
- package/src/assets/web-panel/assets/index-DZWfmuM2.js +1 -0
- package/src/assets/web-panel/assets/{index-CFCQl1hk.js → index-DZcij18m.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4rhVRSV.js → index-Da7bZewp.js} +1 -1
- package/src/assets/web-panel/assets/{index-C052wi94.js → index-DdMzLeDn.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTyhXFDW.js → index-Dj8BNg-z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHtiecyM.js → index-DlX09aXr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjM0jsm1.js → index-DrfiELFa.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGke5qZp.js → index-Dt0Tp8TS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKwkP66s.js → index-DvNCyE3A.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWq64zmv.js → index-LZYGhjVr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Di5tuS0d.js → index-fMwtau_-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEENN81t.js → index-mqHxeING.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHpwwlmv.js → index-mzNWO8Yy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJWYN-AT.js → index-p3d5_s7V.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0Lj7Yl0.js → index-qJbfToeQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-fqI1KnP_.js → index-sAfwWh0R.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsChgzu2.js → index-xJkPbv0L.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJbqE5Sw.js → index-yhA-qP4Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bs-romIz.js → index-zEr6BW9X.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BTloFqyf.js → initDefaultProps-CacwmJft.js} +1 -1
- package/src/assets/web-panel/assets/{motion-44iMBc1o.js → motion-BWrP7Lz6.js} +1 -1
- package/src/assets/web-panel/assets/{move-CyWQI5eW.js → move-imnbiy1n.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CXfJtuFy.js → omit-BlaOv91I.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-ANFpSZes.js → pickAttrs-DUGKp0ro.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CigX-url.js → placementArrow-P0ZA4yAK.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Ch48RA0m.js → responsiveObserve-CZz-M9cI.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BEz3LORF.js → slide-BEnICwoX.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-D9EniG8V.js → statusUtils-DdYKRSiH.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-C1IvuY3L.js → styleChecker-DgUxvOQt.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C92oHeXB.js → useFlexGapSupport-BUEmeWdR.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CJhvFpgB.js → useFs-BXsj6Z5e.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BPkyunN_.js → vnode-B3Pp583L.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B6Ipb64r.js → zoom-D-LYfiQh.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/crosschain.js +403 -1
- package/src/commands/pair.js +291 -0
- package/src/index.js +2 -0
- package/src/lib/cross-chain-mtc.js +275 -6
- package/src/lib/cross-chain.js +48 -2
- package/src/lib/lan-pairing-preflight.js +425 -0
- package/src/lib/lan-pairing-tokens.js +264 -0
- package/src/assets/web-panel/assets/Multisig-D-IuEDLa.css +0 -1
- package/src/assets/web-panel/assets/Multisig-FZTU5ri6.js +0 -1
- package/src/assets/web-panel/assets/index-BXfePRef.js +0 -1
- package/src/assets/web-panel/assets/index-Dc4fj_Ys.js +0 -1
package/src/assets/web-panel/assets/{placementArrow-CigX-url.js → placementArrow-P0ZA4yAK.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-DY5Oc3z6.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
|
package/src/assets/web-panel/assets/{responsiveObserve-Ch48RA0m.js → responsiveObserve-CZz-M9cI.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as o,h}from"./index-
|
|
1
|
+
import{I as o,h}from"./index-DY5Oc3z6.js";import{f as x}from"./vendor-M5lGV-wr.js";const b=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{b as r,w as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
1
|
+
import{K as n}from"./index-DY5Oc3z6.js";import{i as e}from"./motion-BWrP7Lz6.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
|
|
2
2
|
${i}-enter,
|
|
3
3
|
${i}-appear
|
|
4
4
|
`]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./index-
|
|
1
|
+
import{i as e}from"./index-DY5Oc3z6.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as d}from"./index-
|
|
1
|
+
import{A as d}from"./index-DY5Oc3z6.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
|
package/src/assets/web-panel/assets/{useFlexGapSupport-C92oHeXB.js → useFlexGapSupport-BUEmeWdR.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as o}from"./styleChecker-
|
|
1
|
+
import{d as o}from"./styleChecker-DgUxvOQt.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as d}from"./index-
|
|
1
|
+
import{u as d}from"./index-DY5Oc3z6.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as i,h as a,w as l}from"./index-
|
|
1
|
+
import{M as i,h as a,w as l}from"./index-DY5Oc3z6.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-DY5Oc3z6.js";import{i as f}from"./motion-BWrP7Lz6.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
|
|
2
2
|
${t}-enter,
|
|
3
3
|
${t}-appear
|
|
4
4
|
`]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Injected by web-ui-server.js at serve time
|
|
9
9
|
window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
|
|
10
10
|
</script>
|
|
11
|
-
<script type="module" crossorigin src="./assets/index-
|
|
11
|
+
<script type="module" crossorigin src="./assets/index-DY5Oc3z6.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-M5lGV-wr.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-NT6gy8Ee.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-CfX1DEtk.css">
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cc crosschain` — CLI surface for Phase 89 Cross-Chain Interoperability.
|
|
3
|
+
*
|
|
4
|
+
* #21 B.5 Layer 1 PR1 (2026-05-15): `cc crosschain bridge --require-multisig`
|
|
5
|
+
* opt-in routes outbound bridge through m-of-n multisig (domain
|
|
6
|
+
* `crosschain.bridge.outbound`); `cc crosschain bridge-consume <proposalId>`
|
|
7
|
+
* finalizes after threshold is reached. Mirrors marketplace purchase/consume.
|
|
3
8
|
*/
|
|
4
9
|
|
|
5
10
|
import fs from "node:fs";
|
|
@@ -8,6 +13,14 @@ import { Command } from "commander";
|
|
|
8
13
|
|
|
9
14
|
import { bootstrap } from "../runtime/bootstrap.js";
|
|
10
15
|
import { getHomeDir } from "../lib/paths.js";
|
|
16
|
+
import {
|
|
17
|
+
openMultisigManager,
|
|
18
|
+
defaultMultisigDbPath,
|
|
19
|
+
defaultMultisigLogPath,
|
|
20
|
+
readSecretKey,
|
|
21
|
+
} from "../lib/multisig-runtime.js";
|
|
22
|
+
|
|
23
|
+
const MULTISIG_BRIDGE_OUTBOUND_DOMAIN = "crosschain.bridge.outbound";
|
|
11
24
|
import {
|
|
12
25
|
getCrossChainMtcDir,
|
|
13
26
|
getBridgeMtcStatus,
|
|
@@ -111,6 +124,299 @@ function _maybeStageMtc(opts, opBuilder) {
|
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
126
|
|
|
127
|
+
/**
|
|
128
|
+
* #21 B.5 Layer 1 — open a multisig proposal for an outbound bridge.
|
|
129
|
+
* Does NOT insert into cc_bridges yet; bridge-consume does that after
|
|
130
|
+
* the proposal reaches threshold. Mirrors marketplace.purchase.
|
|
131
|
+
*/
|
|
132
|
+
async function _bridgePropose({
|
|
133
|
+
fromChain,
|
|
134
|
+
toChain,
|
|
135
|
+
amount,
|
|
136
|
+
asset,
|
|
137
|
+
sender,
|
|
138
|
+
recipient,
|
|
139
|
+
initiator,
|
|
140
|
+
alg,
|
|
141
|
+
key,
|
|
142
|
+
multisigDb,
|
|
143
|
+
multisigLog,
|
|
144
|
+
json,
|
|
145
|
+
}) {
|
|
146
|
+
if (!initiator) {
|
|
147
|
+
const out = {
|
|
148
|
+
status: "blocked",
|
|
149
|
+
reason: "missing_initiator",
|
|
150
|
+
path: "multisig",
|
|
151
|
+
};
|
|
152
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
153
|
+
else
|
|
154
|
+
console.error(
|
|
155
|
+
"✗ --initiator <did> required when --require-multisig is set",
|
|
156
|
+
);
|
|
157
|
+
process.exitCode = 2;
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
if (!key) {
|
|
161
|
+
const out = {
|
|
162
|
+
status: "blocked",
|
|
163
|
+
reason: "missing_key",
|
|
164
|
+
path: "multisig",
|
|
165
|
+
};
|
|
166
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
167
|
+
else
|
|
168
|
+
console.error(
|
|
169
|
+
"✗ --key <hex|path> required when --require-multisig is set",
|
|
170
|
+
);
|
|
171
|
+
process.exitCode = 2;
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const { store, mgr, close } = await openMultisigManager(
|
|
176
|
+
multisigDb,
|
|
177
|
+
multisigLog,
|
|
178
|
+
);
|
|
179
|
+
try {
|
|
180
|
+
const policy = store.getPolicy(MULTISIG_BRIDGE_OUTBOUND_DOMAIN);
|
|
181
|
+
if (!policy) {
|
|
182
|
+
const out = {
|
|
183
|
+
status: "blocked",
|
|
184
|
+
reason: "no_policy",
|
|
185
|
+
path: "multisig",
|
|
186
|
+
domain: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
|
|
187
|
+
};
|
|
188
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
189
|
+
else
|
|
190
|
+
console.error(
|
|
191
|
+
`✗ No multisig policy for domain "${MULTISIG_BRIDGE_OUTBOUND_DOMAIN}". Run: cc multisig policy set ${MULTISIG_BRIDGE_OUTBOUND_DOMAIN} --m <M> --members <json>`,
|
|
192
|
+
);
|
|
193
|
+
process.exitCode = 2;
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const secretKey = readSecretKey(key);
|
|
198
|
+
const payload = {
|
|
199
|
+
fromChain,
|
|
200
|
+
toChain,
|
|
201
|
+
asset: asset || "native",
|
|
202
|
+
amount,
|
|
203
|
+
sender: sender || null,
|
|
204
|
+
recipient: recipient || null,
|
|
205
|
+
};
|
|
206
|
+
const result = mgr.propose({
|
|
207
|
+
domain: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
|
|
208
|
+
payload,
|
|
209
|
+
policy,
|
|
210
|
+
initiator: { did: initiator, alg: alg || "Ed25519", secretKey },
|
|
211
|
+
});
|
|
212
|
+
const out = {
|
|
213
|
+
status: "needs_co_sign",
|
|
214
|
+
path: "multisig",
|
|
215
|
+
proposalId: result.proposal.id,
|
|
216
|
+
reachedThreshold: result.reachedThreshold,
|
|
217
|
+
requiredSigs: policy.m,
|
|
218
|
+
memberCount: policy.members.length,
|
|
219
|
+
payload,
|
|
220
|
+
};
|
|
221
|
+
if (json) {
|
|
222
|
+
console.log(JSON.stringify(out, null, 2));
|
|
223
|
+
} else {
|
|
224
|
+
console.log(
|
|
225
|
+
`↪ Routed through multisig (domain ${MULTISIG_BRIDGE_OUTBOUND_DOMAIN})`,
|
|
226
|
+
);
|
|
227
|
+
console.log(` proposalId: ${result.proposal.id}`);
|
|
228
|
+
console.log(` needs ${policy.m} of ${policy.members.length} signatures`);
|
|
229
|
+
if (result.reachedThreshold)
|
|
230
|
+
console.log(
|
|
231
|
+
` ✓ threshold reached on first signature — run: cc crosschain bridge-consume ${result.proposal.id}`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
return out;
|
|
235
|
+
} finally {
|
|
236
|
+
close();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* #21 B.5 Layer 1 — finalize an outbound bridge after multisig threshold.
|
|
242
|
+
* Reads the proposal's payload, executes the actual bridgeAsset() insert,
|
|
243
|
+
* then marks the proposal consumed. Mirrors marketplace.consume.
|
|
244
|
+
*
|
|
245
|
+
* PR4 — when `mtc=true`, additionally stage the bridge op with multisig
|
|
246
|
+
* provenance via `_maybeStageMtc` so closeBatch carries it into the MTC
|
|
247
|
+
* envelope leaf (and downstream wrapper attachment / Layer 3 broadcast).
|
|
248
|
+
*/
|
|
249
|
+
async function _bridgeConsume({
|
|
250
|
+
db,
|
|
251
|
+
proposalId,
|
|
252
|
+
multisigDb,
|
|
253
|
+
multisigLog,
|
|
254
|
+
json,
|
|
255
|
+
mtc,
|
|
256
|
+
mtcConfigDir,
|
|
257
|
+
}) {
|
|
258
|
+
const { mgr, close } = await openMultisigManager(multisigDb, multisigLog);
|
|
259
|
+
try {
|
|
260
|
+
const got = mgr.get(proposalId);
|
|
261
|
+
if (!got) {
|
|
262
|
+
const out = { status: "error", reason: "proposal_not_found" };
|
|
263
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
264
|
+
else console.error(`✗ No proposal: ${proposalId}`);
|
|
265
|
+
process.exitCode = 2;
|
|
266
|
+
return out;
|
|
267
|
+
}
|
|
268
|
+
if (got.proposal.domain !== MULTISIG_BRIDGE_OUTBOUND_DOMAIN) {
|
|
269
|
+
const out = {
|
|
270
|
+
status: "error",
|
|
271
|
+
reason: "wrong_domain",
|
|
272
|
+
expected: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
|
|
273
|
+
actual: got.proposal.domain,
|
|
274
|
+
};
|
|
275
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
276
|
+
else
|
|
277
|
+
console.error(
|
|
278
|
+
`✗ Proposal domain "${got.proposal.domain}" is not "${MULTISIG_BRIDGE_OUTBOUND_DOMAIN}" — use the matching consume command for that domain instead.`,
|
|
279
|
+
);
|
|
280
|
+
process.exitCode = 2;
|
|
281
|
+
return out;
|
|
282
|
+
}
|
|
283
|
+
if (got.proposal.state !== "reached") {
|
|
284
|
+
const out = {
|
|
285
|
+
status: "error",
|
|
286
|
+
reason: `proposal_state_${got.proposal.state}`,
|
|
287
|
+
};
|
|
288
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
289
|
+
else
|
|
290
|
+
console.error(
|
|
291
|
+
`✗ Proposal state is "${got.proposal.state}", need "reached" — sign more before consume.`,
|
|
292
|
+
);
|
|
293
|
+
process.exitCode = 2;
|
|
294
|
+
return out;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const payload = JSON.parse(got.proposal.payloadJcs);
|
|
298
|
+
|
|
299
|
+
// #21 B.5 Layer 2 PR1 — extract m-of-n provenance from the reached
|
|
300
|
+
// proposal and persist it alongside the bridge row. signatures are
|
|
301
|
+
// returned sorted by signer_did ASC (store.getSignatures), so the array
|
|
302
|
+
// ordering is canonical for any downstream onchain verifier.
|
|
303
|
+
const signatures = got.signatures || [];
|
|
304
|
+
// PR4 adds thresholdM + memberCountN so the carry-forward MTC staging
|
|
305
|
+
// can build the canonical multisig_provenance shape required by
|
|
306
|
+
// attachMultisigProvenance / verifyMultisigProvenance.
|
|
307
|
+
const multisigContext = {
|
|
308
|
+
proposalId: got.proposal.id,
|
|
309
|
+
thresholdM: got.proposal.thresholdM,
|
|
310
|
+
memberCountN: Array.isArray(got.proposal.memberSet)
|
|
311
|
+
? got.proposal.memberSet.length
|
|
312
|
+
: signatures.length,
|
|
313
|
+
signers: signatures.map((s) => s.signerDid),
|
|
314
|
+
partialSigs: signatures.map((s) => ({
|
|
315
|
+
did: s.signerDid,
|
|
316
|
+
alg: s.alg,
|
|
317
|
+
sig: Buffer.isBuffer(s.sig) ? s.sig.toString("hex") : String(s.sig),
|
|
318
|
+
})),
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
const bridgeResult = bridgeAsset(
|
|
322
|
+
db,
|
|
323
|
+
{
|
|
324
|
+
fromChain: payload.fromChain,
|
|
325
|
+
toChain: payload.toChain,
|
|
326
|
+
asset: payload.asset,
|
|
327
|
+
amount: payload.amount,
|
|
328
|
+
senderAddress: payload.sender,
|
|
329
|
+
recipientAddress: payload.recipient,
|
|
330
|
+
},
|
|
331
|
+
multisigContext,
|
|
332
|
+
);
|
|
333
|
+
if (!bridgeResult.bridgeId) {
|
|
334
|
+
const out = {
|
|
335
|
+
status: "error",
|
|
336
|
+
reason: `bridge_insert_failed_${bridgeResult.reason}`,
|
|
337
|
+
proposalId,
|
|
338
|
+
};
|
|
339
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
340
|
+
else
|
|
341
|
+
console.error(
|
|
342
|
+
`✗ Bridge insert failed: ${bridgeResult.reason} — proposal left in "reached" state`,
|
|
343
|
+
);
|
|
344
|
+
process.exitCode = 1;
|
|
345
|
+
return out;
|
|
346
|
+
}
|
|
347
|
+
const finalizeRes = mgr.finalize(proposalId);
|
|
348
|
+
if (!finalizeRes.ok) {
|
|
349
|
+
const out = {
|
|
350
|
+
status: "error",
|
|
351
|
+
reason: finalizeRes.reason,
|
|
352
|
+
proposalId,
|
|
353
|
+
bridgeId: bridgeResult.bridgeId,
|
|
354
|
+
};
|
|
355
|
+
if (json) console.log(JSON.stringify(out, null, 2));
|
|
356
|
+
else
|
|
357
|
+
console.error(
|
|
358
|
+
`✗ Finalize failed: ${finalizeRes.reason} (bridge row ${bridgeResult.bridgeId} already inserted)`,
|
|
359
|
+
);
|
|
360
|
+
process.exitCode = 1;
|
|
361
|
+
return out;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// PR4 — opt-in MTC staging carries the multisig provenance forward into
|
|
365
|
+
// closeBatch / wrapper envelope. Same `_maybeStageMtc` helper as the
|
|
366
|
+
// legacy direct-bridge path, just with an enriched op shape including
|
|
367
|
+
// the canonical `multisig_provenance` field.
|
|
368
|
+
const mtcStaged = _maybeStageMtc({ mtc, mtcConfigDir }, () => ({
|
|
369
|
+
bridge_op: "lock",
|
|
370
|
+
src_chain: payload.fromChain,
|
|
371
|
+
dst_chain: payload.toChain,
|
|
372
|
+
src_tx_hash: bridgeResult.bridgeId,
|
|
373
|
+
amount: String(payload.amount),
|
|
374
|
+
asset: payload.asset || "native",
|
|
375
|
+
src_did: payload.sender || null,
|
|
376
|
+
dst_did: payload.recipient || null,
|
|
377
|
+
issued_at: new Date().toISOString(),
|
|
378
|
+
multisig_provenance: {
|
|
379
|
+
proposal_id: multisigContext.proposalId,
|
|
380
|
+
threshold_m: multisigContext.thresholdM,
|
|
381
|
+
member_count_n: multisigContext.memberCountN,
|
|
382
|
+
signers: multisigContext.signers,
|
|
383
|
+
partial_sigs: multisigContext.partialSigs,
|
|
384
|
+
},
|
|
385
|
+
}));
|
|
386
|
+
|
|
387
|
+
const out = {
|
|
388
|
+
status: "consumed",
|
|
389
|
+
proposalId,
|
|
390
|
+
bridgeId: bridgeResult.bridgeId,
|
|
391
|
+
fee: bridgeResult.fee,
|
|
392
|
+
payload,
|
|
393
|
+
// Layer 2 provenance — surface what was persisted on the bridge row.
|
|
394
|
+
signers: multisigContext.signers,
|
|
395
|
+
partialSigCount: multisigContext.partialSigs.length,
|
|
396
|
+
// PR4 — surface MTC staging result when --mtc was passed.
|
|
397
|
+
mtc: mtcStaged,
|
|
398
|
+
};
|
|
399
|
+
if (json) {
|
|
400
|
+
console.log(JSON.stringify(out, null, 2));
|
|
401
|
+
} else {
|
|
402
|
+
console.log(
|
|
403
|
+
`✓ Bridge consumed — ${payload.fromChain} → ${payload.toChain}, amount ${payload.amount} ${payload.asset}`,
|
|
404
|
+
);
|
|
405
|
+
console.log(
|
|
406
|
+
` bridgeId: ${bridgeResult.bridgeId} (fee ${bridgeResult.fee})`,
|
|
407
|
+
);
|
|
408
|
+
console.log(` proposalId: ${proposalId}`);
|
|
409
|
+
if (mtcStaged?.staged)
|
|
410
|
+
console.log(` MTC envelope staged: ${mtcStaged.path}`);
|
|
411
|
+
else if (mtcStaged && !mtcStaged.staged)
|
|
412
|
+
console.log(` MTC stage skipped: ${mtcStaged.reason}`);
|
|
413
|
+
}
|
|
414
|
+
return out;
|
|
415
|
+
} finally {
|
|
416
|
+
close();
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
114
420
|
export function registerCrossChainCommand(program) {
|
|
115
421
|
const cc = new Command("crosschain")
|
|
116
422
|
.description("Cross-chain interoperability (Phase 89)")
|
|
@@ -174,9 +480,49 @@ export function registerCrossChainCommand(program) {
|
|
|
174
480
|
"On success, stage an MTC bridge envelope (requires cc crosschain mtc-batch to close)",
|
|
175
481
|
)
|
|
176
482
|
.option("--mtc-config-dir <dir>", "Override MTC config root")
|
|
483
|
+
.option(
|
|
484
|
+
"--require-multisig",
|
|
485
|
+
"Route through m-of-n multisig (domain crosschain.bridge.outbound). Requires --initiator + --key + policy set.",
|
|
486
|
+
)
|
|
487
|
+
.option(
|
|
488
|
+
"--initiator <did>",
|
|
489
|
+
"Initiator DID for multisig proposal (required when --require-multisig)",
|
|
490
|
+
)
|
|
491
|
+
.option("--alg <alg>", "Initiator signing alg", "Ed25519")
|
|
492
|
+
.option(
|
|
493
|
+
"--key <hex|path>",
|
|
494
|
+
"Initiator secret key hex or path to hex file (required when --require-multisig)",
|
|
495
|
+
)
|
|
496
|
+
.option(
|
|
497
|
+
"--multisig-db <path>",
|
|
498
|
+
"Multisig SQLite DB path (default ~/.chainlesschain/multisig.db)",
|
|
499
|
+
)
|
|
500
|
+
.option(
|
|
501
|
+
"--multisig-log <path>",
|
|
502
|
+
"Multisig governance log path (default ~/.chainlesschain/multisig.governance.log)",
|
|
503
|
+
)
|
|
177
504
|
.option("--json", "JSON output")
|
|
178
|
-
.action((fromChain, toChain, amount, opts) => {
|
|
505
|
+
.action(async (fromChain, toChain, amount, opts) => {
|
|
179
506
|
const db = _dbFromCtx(cc);
|
|
507
|
+
|
|
508
|
+
if (opts.requireMultisig) {
|
|
509
|
+
return _bridgePropose({
|
|
510
|
+
db,
|
|
511
|
+
fromChain,
|
|
512
|
+
toChain,
|
|
513
|
+
amount: parseFloat(amount),
|
|
514
|
+
asset: opts.asset,
|
|
515
|
+
sender: opts.sender,
|
|
516
|
+
recipient: opts.recipient,
|
|
517
|
+
initiator: opts.initiator,
|
|
518
|
+
alg: opts.alg,
|
|
519
|
+
key: opts.key,
|
|
520
|
+
multisigDb: opts.multisigDb || defaultMultisigDbPath(),
|
|
521
|
+
multisigLog: opts.multisigLog || defaultMultisigLogPath(),
|
|
522
|
+
json: opts.json,
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
|
|
180
526
|
const result = bridgeAsset(db, {
|
|
181
527
|
fromChain,
|
|
182
528
|
toChain,
|
|
@@ -208,6 +554,37 @@ export function registerCrossChainCommand(program) {
|
|
|
208
554
|
console.log(`MTC stage skipped: ${mtc.reason}`);
|
|
209
555
|
});
|
|
210
556
|
|
|
557
|
+
cc.command("bridge-consume <proposalId>")
|
|
558
|
+
.description(
|
|
559
|
+
"Finalize a multisig-gated bridge after threshold reached — performs the SQLite insert and marks proposal consumed",
|
|
560
|
+
)
|
|
561
|
+
.option(
|
|
562
|
+
"--multisig-db <path>",
|
|
563
|
+
"Multisig SQLite DB path (default ~/.chainlesschain/multisig.db)",
|
|
564
|
+
)
|
|
565
|
+
.option(
|
|
566
|
+
"--multisig-log <path>",
|
|
567
|
+
"Multisig governance log path (default ~/.chainlesschain/multisig.governance.log)",
|
|
568
|
+
)
|
|
569
|
+
.option(
|
|
570
|
+
"--mtc",
|
|
571
|
+
"On success, stage an MTC bridge envelope carrying the multisig provenance (requires cc crosschain mtc-batch to close)",
|
|
572
|
+
)
|
|
573
|
+
.option("--mtc-config-dir <dir>", "Override MTC config root")
|
|
574
|
+
.option("--json", "JSON output")
|
|
575
|
+
.action(async (proposalId, opts) => {
|
|
576
|
+
const db = _dbFromCtx(cc);
|
|
577
|
+
return _bridgeConsume({
|
|
578
|
+
db,
|
|
579
|
+
proposalId,
|
|
580
|
+
multisigDb: opts.multisigDb || defaultMultisigDbPath(),
|
|
581
|
+
multisigLog: opts.multisigLog || defaultMultisigLogPath(),
|
|
582
|
+
json: opts.json,
|
|
583
|
+
mtc: opts.mtc,
|
|
584
|
+
mtcConfigDir: opts.mtcConfigDir,
|
|
585
|
+
});
|
|
586
|
+
});
|
|
587
|
+
|
|
211
588
|
cc.command("bridge-status <bridge-id> <status>")
|
|
212
589
|
.description("Update bridge status")
|
|
213
590
|
.option("-t, --tx-hash <hash>", "Transaction hash")
|
|
@@ -242,6 +619,31 @@ export function registerCrossChainCommand(program) {
|
|
|
242
619
|
if (b.lock_tx_hash) console.log(`Lock TX: ${b.lock_tx_hash}`);
|
|
243
620
|
if (b.mint_tx_hash) console.log(`Mint TX: ${b.mint_tx_hash}`);
|
|
244
621
|
if (b.error_message) console.log(`Error: ${b.error_message}`);
|
|
622
|
+
// #21 B.5 Layer 2 PR1 — surface m-of-n provenance when present.
|
|
623
|
+
if (b.multisig_proposal_id) {
|
|
624
|
+
console.log(`Multisig: ${b.multisig_proposal_id}`);
|
|
625
|
+
try {
|
|
626
|
+
const signers = b.signers_did_json
|
|
627
|
+
? JSON.parse(b.signers_did_json)
|
|
628
|
+
: [];
|
|
629
|
+
const sigs = b.partial_sigs_json
|
|
630
|
+
? JSON.parse(b.partial_sigs_json)
|
|
631
|
+
: [];
|
|
632
|
+
console.log(
|
|
633
|
+
`Signers: ${signers.length} — ${signers.join(", ") || "(none)"}`,
|
|
634
|
+
);
|
|
635
|
+
if (sigs.length) {
|
|
636
|
+
const algs = [...new Set(sigs.map((s) => s.alg))].join("+");
|
|
637
|
+
console.log(`Sigs: ${sigs.length} partial (${algs})`);
|
|
638
|
+
}
|
|
639
|
+
} catch (_err) {
|
|
640
|
+
/* malformed provenance JSON — show raw cell content */
|
|
641
|
+
if (b.signers_did_json)
|
|
642
|
+
console.log(`Signers: ${b.signers_did_json}`);
|
|
643
|
+
if (b.partial_sigs_json)
|
|
644
|
+
console.log(`Sigs: ${b.partial_sigs_json}`);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
245
647
|
});
|
|
246
648
|
|
|
247
649
|
cc.command("bridges")
|