CINXE.COM
Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas - Blockchain.News
<!doctype html> <html lang="en"> <head prefix="og: http://ogp.me/ns#"> <!-- 在已有的脚本引用后面添加 --> <script src="https://unpkg.com/langchain@0.0.73/dist/langchain.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/langsmith-sdk@0.0.41/dist/index.min.js"></script> <!-- Dark mode --> <script> const storedTheme = localStorage.getItem('theme') const getPreferredTheme = () => { if (storedTheme) { return storedTheme } return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'light' } const setTheme = function (theme) { if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.documentElement.setAttribute('data-bs-theme', 'dark') } else { document.documentElement.setAttribute('data-bs-theme', theme) } } setTheme(getPreferredTheme()) window.addEventListener('DOMContentLoaded', () => { var el = document.querySelector('.theme-icon-active'); if (el != 'undefined' && el != null) { const showActiveTheme = theme => { const activeThemeIcon = document.querySelector('.theme-icon-active use') const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) const svgOfActiveBtn = btnToActive.querySelector('.mode-switch use').getAttribute('href') document.querySelectorAll('[data-bs-theme-value]').forEach(element => { element.classList.remove('active') }) btnToActive.classList.add('active') activeThemeIcon.setAttribute('href', svgOfActiveBtn) } window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { if (storedTheme !== 'light' || storedTheme !== 'dark') { setTheme(getPreferredTheme()) } }) showActiveTheme(getPreferredTheme()) document.querySelectorAll('[data-bs-theme-value]') .forEach(toggle => { toggle.addEventListener('click', () => { const theme = toggle.getAttribute('data-bs-theme-value') localStorage.setItem('theme', theme) setTheme(theme) showActiveTheme(theme) }) }) } }) </script> <!-- Google Font --> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@400;700&family=Rubik:wght@400;500;700&display=swap" rel="stylesheet" /> <!-- Plugins CSS --> <link rel="stylesheet" type="text/css" href="/bn/vendor/font-awesome/css/all.min.css" /> <link rel="stylesheet" type="text/css" href="/bn/vendor/bootstrap-icons/bootstrap-icons.css" /> <link rel="stylesheet" type="text/css" href="/bn/vendor/tiny-slider/tiny-slider.css" /> <!-- Theme CSS --> <link rel="stylesheet" type="text/css" href="/bn/css/style.css" /> <!-- Google Web Fonts ================================================== --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-134821821-1"></script> <script data-ad-client="ca-pub-2685412041103446" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-134821821-1'); </script> <!-- end of Global site tag (gtag.js) - Google Analytics --> <!-- Basic Page Needs ================================================== --> <!--meta info--> <!--meta info--> <meta charset="utf-8"> <meta name="author" content="blockchain.news"> <meta name="keywords" content="AI,crypto,blockchain,news" /> <!-- Meta Tags --> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta charset="utf-8" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas" /> <meta property="og:image" content="https://blockchainstock.azureedge.net:443/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" /> <meta itemprop="image" content="https://blockchainstock.azureedge.net:443/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" /> <meta property="og:url" content="https://blockchain.news/news/ripple-ceo-disagrees-coinbase-ceo-apolitical-work-policy-considers-relocating-overseas" /> <meta property="twitter:image" content="https://blockchainstock.azureedge.net:443/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" /> <meta property="twitter:site" content="https://blockchain.news/news/ripple-ceo-disagrees-coinbase-ceo-apolitical-work-policy-considers-relocating-overseas" /> <meta property="twitter:title" content="Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas" /> <meta property="twitter:description" content="Coinbase CEO Brian Armstrong has banned political discussions in the crypto work environment, a move that Ripple CEO Brad Garlinghouse disagrees with." /> <meta property="og:description" content="Coinbase CEO Brian Armstrong has banned political discussions in the crypto work environment, a move that Ripple CEO Brad Garlinghouse disagrees with." /> <meta name="Description" content="Coinbase CEO Brian Armstrong has banned political discussions in the crypto work environment, a move that Ripple CEO Brad Garlinghouse disagrees with." /> <meta name="datePublished" content="2020-10-27T02:00:00.0000000" /> <meta name="dateModified" content="2020-10-27T02:18:58.3260592" /> <meta property="fb:app_id" content="2602656609775939" /> <!--Twitter tags--> <meta name="twitter:card" content="summary_large_image"> <!--Render Post info for social media sharing--> <!-- Mobile Specific Metas ================================================== --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"> <!-- Vendor CSS ============================================ --> <!-- Start Alexa Certify Javascript --> <!-- End Alexa Certify Javascript --> <!-- CSS theme files ============================================ --> <style> .chat-container { height: 400px; display: flex; flex-direction: column; } .chat-messages { flex-grow: 1; overflow-y: auto; padding: 10px; background: #f8f9fa; margin-bottom: 10px; } .chat-input { padding: 10px 0; } .message { margin-bottom: 10px; padding: 8px; border-radius: 8px; max-width: 80%; } .user-message { background: #007bff; color: white; margin-left: auto; } .bot-message { background: #e9ecef; margin-right: auto; } @keyframes pulse { 0% { opacity: 1; transform: scale(1); } 50% { opacity: 0.3; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } .animate-pulse { animation: pulse 1.5s infinite; display: inline-block; } .typing-indicator { display: flex; gap: 4px; padding: 8px 12px; background: #e9ecef; border-radius: 15px; margin: 10px 0; width: fit-content; } .typing-indicator span { width: 8px; height: 8px; background: #6c757d; border-radius: 50%; animation: typing 1s infinite ease-in-out; } .typing-indicator span:nth-child(1) { animation-delay: 0.1s; } .typing-indicator span:nth-child(2) { animation-delay: 0.2s; } .typing-indicator span:nth-child(3) { animation-delay: 0.3s; } @keyframes typing { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /*logo大小控制*/ /* 添加这些 CSS 规则 */ .navbar-brand { flex-shrink: 0 !important; /* 防止 logo 被压缩 */ width: auto !important; /* 防止宽度被挤压 */ } .navbar-brand-item { width: 190px !important; /* 或者你想要的具体尺寸 */ height: 50px !important; max-width: none !important; /* 防止被 max-width 限制 */ flex: none !important; /* 防止 flex 布局影响 */ } /* 确保 logo 容器不受字体大小影响 */ .navbar > .container { display: flex; align-items: center; } /* 确保中间的导航菜单可以自适应 */ .navbar-collapse { flex: 1 1 auto; } /* 移动端顶部栏样式 */ .navbar-top-mobile { background-color: #fff; border-bottom: 1px solid rgba(0,0,0,.1); } .navbar-top-mobile .nav-link { padding: 0.25rem 0.5rem; color: rgba(0,0,0,.7); } .navbar-top-mobile .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; } .navbar-top-mobile .social-icons { display: flex; gap: 0.5rem; } .navbar-top-mobile .social-icons .btn-link { color: rgba(0,0,0,.7); text-decoration: none; } .navbar-top-mobile .social-icons .btn-link:hover { color: var(--bs-primary); } /* 暗色模式适配 */ [data-bs-theme="dark"] .navbar-top-mobile { background-color: #212529; border-bottom-color: rgba(255,255,255,.1); } [data-bs-theme="dark"] .navbar-top-mobile .nav-link, [data-bs-theme="dark"] .navbar-top-mobile .btn-link { color: rgba(255,255,255,.7); } /* 动画效果 */ .animate-pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { opacity: 1; transform: scale(1); } 50% { opacity: 0.3; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } /*机器人图标*/ .ai-assistant-trigger { right: 30px; bottom: 40%; z-index: 1000; transition: all 0.3s ease; } .ai-button { width: 65px; height: 65px; border-radius: 50%; background: rgba(0, 0, 0, 0.8); border: 2px solid #00F0FF; box-shadow: 0 0 15px rgba(0, 240, 255, 0.3); display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; padding: 0; } .ai-button:hover { transform: scale(1.1); box-shadow: 0 0 20px rgba(0, 240, 255, 0.5); border-color: #00F0FF; } .animate-pulse { animation: pulse 1.5s infinite; } /* 暗色模式适配 */ [data-bs-theme="dark"] .ai-button { background: rgba(0, 0, 0, 0.9); } /* 添加到你的样式文件中 */ .modal { overflow-y: auto !important; } .modal-open { overflow: auto !important; padding-right: 0 !important; } /* 增强的雪花效果 */ .snowfall-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1000; } .snowflake { position: fixed; top: -10px; color: #BCE4F1; /* 更深的蓝白色 */ font-size: 1.2em; text-shadow: 0 0 5px rgba(0,240,255,0.5), 0 0 10px rgba(0,240,255,0.3), 0 0 15px rgba(0,240,255,0.2); filter: drop-shadow(0 0 2px rgba(0,0,0,0.1)); animation: snowfall linear infinite; } /* 修改装饰位置的样式 */ .christmas-decorations div { position: fixed; font-size: 2em; animation: float 3s ease-in-out infinite; cursor: pointer; /* 添加鼠标指针样式 */ z-index: 9999; } .top-left { top: 40px; left: 20px; animation-delay: 0s; z-index: 9999; /* 确保显示在最上层 */ } .top-right { top: 40px; right: 20px; animation-delay: 0.5s; z-index: 9999; /* 确保显示在最上层 */ } .bottom-left { bottom: 10px; left: 20px; animation-delay: 1s; } .bottom-right { bottom: 10px; right: 20px; animation-delay: 1.5s; } @keyframes snowfall { 0% { transform: translateY(-10px) rotate(0deg); } 100% { transform: translateY(100vh) rotate(360deg); } } @keyframes float { 0%, 100% { transform: translateY(-50%) translateX(0); } 50% { transform: translateY(-50%) translateX(-10px); } } /* 让雪花在hover时有特效 */ .snowflake:hover { color: #FFF; text-shadow: 0 0 10px rgba(0,240,255,0.8), 0 0 20px rgba(0,240,255,0.6), 0 0 30px rgba(0,240,255,0.4); } /* 为底部装饰单独设置动画 */ .bottom-left, .bottom-right { animation: floatBottom 3s ease-in-out infinite; } @keyframes floatBottom { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* 可选:添加发光效果 */ .christmas-decorations div { filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.5)); } /* 麋鹿和雪橇的样式 */ #santa-sleigh { position: fixed; top: 40%; left: -300px; z-index: 9999; white-space: nowrap; pointer-events: none; display: flex; align-items: center; gap: 0px; font-size: 6em; /* 整体水平翻转 */ transform: scaleX(-1); } /* 麋鹿样式 */ .reindeer { animation: reindeerGallop 0.6s infinite; transform-origin: bottom center; margin-right: -15px; /* 微调与绳子的间距 */ } /* 雪橇样式 */ .sleigh { animation: sleighBounce 0.6s infinite; transform-origin: bottom center; margin-left: -10px; /* 微调与绳子的间距 */ } /* 雪橇绳子 */ .sleigh-rope { font-size: 0.4em; /* 调整绳子大小 */ transform: rotate(90deg); margin: 0 -5px; /* 负边距使组件更紧密 */ position: relative; top: -5px; /* 微调绳子位置 */ } /* 动画类 */ .sleigh-animation { animation: sleighRide 6s linear forwards; } /* 麋鹿奔跑动画 */ @keyframes reindeerGallop { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-15px) rotate(-5deg); } } /* 雪橇弹跳动画 */ @keyframes sleighBounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* 整体移动动画 */ @keyframes sleighRide { from { transform: translateX(0) scaleX(-1); } to { transform: translateX(calc(100vw + 200px)) scaleX(-1); } } /* 添加雪橇的影子 */ .sleigh::after { content: ''; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80%; height: 10px; background: rgba(0, 0, 0, 0.2); border-radius: 50%; filter: blur(4px); } /* 添加麋鹿的影子 */ .reindeer::after { content: ''; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80%; height: 10px; background: rgba(0, 0, 0, 0.2); border-radius: 50%; filter: blur(4px); } /* 礼物爆炸效果样式 */ .gift-item { position: fixed; font-size: 1.5em; pointer-events: none; z-index: 9999; transform-origin: center; opacity: 1; /* 添加初始位置 */ left: 50%; top: 50%; } @keyframes giftExplode { 0% { transform: translate(-50%, -50%) rotate(0deg); opacity: 1; } 100% { transform: translate(var(--tx), var(--ty)) rotate(var(--tr)); opacity: 0; } } /* 确保礼物动画生效 */ .gift-item { animation: giftExplode 1s ease-out forwards; } /* 伯利恒之星样式 */ .bethlehem-star-container { position: fixed; width: 0; height: 0; pointer-events: none; z-index: 10000; transform: translate(-50%, -50%); transition: opacity 1s ease; } .bethlehem-star-center { position: absolute; width: 20px; height: 20px; background: #FFD700; border-radius: 50%; left: -10px; top: -10px; box-shadow: 0 0 20px #FFD700; animation: centerGlow 2s ease-in-out; } .bethlehem-star-ray { position: absolute; width: 100px; height: 2px; background: linear-gradient(90deg, #FFD700, transparent); transform-origin: 0 50%; left: 0; top: -1px; animation: rayGrow 2s ease-in-out; } @keyframes centerGlow { 0% { transform: scale(0); opacity: 0; } 20% { transform: scale(1.2); opacity: 1; } 100% { transform: scale(1); opacity: 1; } } @keyframes rayGrow { 0% { width: 0; opacity: 0; } 20% { width: 120px; opacity: 1; } 100% { width: 100px; opacity: 1; } } </style> <script type="text/javascript">!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]}],r)),l.push(function(e,t,n,a){var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties={endpoint:a},i}(0,0,t,p)),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!t&&m.core||a()},500)}var e=function(){var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t)},n}();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function(){l.getElementsByTagName(k)[0].parentNode.appendChild(e)},y.ld||0)}try{m.cookie=l.cookie}catch(p){}function t(e){for(;e.length;)!function(t){m[t]=function(){var e=arguments;g||m.queue.push(function(){m[t].apply(m,e)})}}(e.pop())}var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4};var s=(d.extensionConfig||{}).ApplicationInsightsAnalytics||{};if(!0!==d[I]&&!0!==s[I]){var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i){var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c]({message:e,url:t,lineNumber:n,columnNumber:a,error:i}),r},d.autoExceptionInstrumented=!0}return m}(y.cfg);function a(){y.onInit&&y.onInit(n)}(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView({})):a()}(window,document,{ src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source crossOrigin: "anonymous", cfg: { // Application Insights Configuration connectionString: 'InstrumentationKey=0adf9803-d984-4355-ba1e-3789925e9100;IngestionEndpoint=https://eastasia-0.in.applicationinsights.azure.com/;LiveEndpoint=https://eastasia.livediagnostics.monitor.azure.com/' }});</script></head> <body> <!-- ======================= Header START --> <header class="navbar-light navbar-sticky header-static"> <div class="navbar-top d-none d-lg-block small"> <div class="container"> <div class="d-md-flex justify-content-between align-items-center my-2"> <!-- Top bar left --> <ul class="nav"> <li class="nav-item"> <a class="nav-link ps-0" href="/About">About</a> </li> <li class="nav-item"> <a class="nav-link" href="/Advertisement">Advertisement</a> </li> <li class="nav-item"> <a class="nav-link" href="/Identity/Account/Login">Login / Join</a> </li> </ul> <!-- Center content --> <div class="d-flex align-items-center justify-content-center"> <!-- Font size accessibility START --> <div class="btn-group me-3" role="group" aria-label="font size changer"> <input type="radio" class="btn-check" name="fntradio" id="font-sm"> <label class="btn btn-xs btn-outline-primary mb-0" for="font-sm">A-</label> <input type="radio" class="btn-check" name="fntradio" id="font-default" checked> <label class="btn btn-xs btn-outline-primary mb-0" for="font-default">A</label> <input type="radio" class="btn-check" name="fntradio" id="font-lg"> <label class="btn btn-xs btn-outline-primary mb-0" for="font-lg">A+</label> </div> <!-- Dark mode options START --> <div class="nav-item dropdown mx-2"> <!-- Switch button --> <button class="modeswitch" id="bd-theme" type="button" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static"> <svg class="theme-icon-active"><use href="#"></use></svg> </button> <!-- Dropdown items --> <ul class="dropdown-menu min-w-auto dropdown-menu-end" aria-labelledby="bd-theme"> <li class="mb-1"> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light"> <svg width="16" height="16" fill="currentColor" class="bi bi-brightness-high-fill fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z" /> <use href="#"></use> </svg>Light </button> </li> <li class="mb-1"> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-moon-stars-fill fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z" /> <path d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z" /> <use href="#"></use> </svg>Dark </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="auto"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-half fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z" /> <use href="#"></use> </svg>Auto </button> </li> </ul> </div> <!-- Dark mode options END --> <ul class="nav"> <li class="nav-item"> <a class="nav-link px-2 fs-5" href="https://twitter.com/BlockchainNewsM"><i class="fab fa-twitter-square"></i></a> </li> <li class="nav-item"> <a class="nav-link px-2 fs-5" href="https://www.linkedin.com/company/blockchainnewsbn/"><i class="fab fa-linkedin"></i></a> </li> </ul> </div> <!-- Language switcher (Right aligned) --> <div class="dropup"> <a class="dropdown-toggle text-dark text-primary-hover" href="#" role="button" id="languageSwitcher" data-bs-toggle="dropdown" aria-expanded="false"> English Edition </a> <ul class="dropdown-menu min-w-auto" aria-labelledby="languageSwitcher"> <li><a class="dropdown-item" href="https://cn.blockchain.news">中文</a></li> </ul> </div> </div> <!-- Divider --> <div class="border-bottom border-2 border-primary opacity-1"></div> </div> </div> <!-- 移动端顶部栏 --> <div class="navbar-top-mobile d-lg-none"> <div class="container"> <div class="d-flex justify-content-around align-items-center py-2 border-bottom"> <!-- About链接 --> <a class="nav-link small" href="/About">About</a> <!-- Advertisement链接 --> <a class="nav-link small" href="/Advertisement">Advertisement</a> <!-- 暗色模式切换 --> <div class="nav-item dropdown"> <button class="modeswitch nav-link p-0" id="bd-theme" type="button" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-half fa-fw mode-switch" viewBox="0 0 16 16"> <path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z" /> </svg> </button> <ul class="dropdown-menu min-w-auto dropdown-menu-end" aria-labelledby="bd-theme"> <li class="mb-1"> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light"> <svg width="16" height="16" fill="currentColor" class="bi bi-brightness-high-fill fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z" /> </svg>Light </button> </li> <li class="mb-1"> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-moon-stars-fill fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z" /> <path d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z" /> </svg>Dark </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="auto"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-half fa-fw mode-switch me-1" viewBox="0 0 16 16"> <path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z" /> </svg>Auto </button> </li> </ul> </div> <!-- 社交媒体图标 --> <div class="nav d-flex align-items-center"> <a class="nav-link px-2 fs-5" href="https://twitter.com/BlockchainNewsM"> <i class="fab fa-twitter-square"></i> </a> <a class="nav-link px-2 fs-5" href="https://www.linkedin.com/company/blockchainnewsbn/"> <i class="fab fa-linkedin"></i> </a> </div> <!-- 语言切换 --> <div class="dropup d-flex align-items-center"> <a class="dropdown-toggle text-dark text-primary-hover nav-link" href="#" role="button" id="languageSwitcher" data-bs-toggle="dropdown" aria-expanded="false"> English </a> <ul class="dropdown-menu min-w-auto dropdown-menu-end" aria-labelledby="languageSwitcher"> <li><a class="dropdown-item" href="https://cn.blockchain.news">中文</a></li> </ul> </div> <!-- 登录链接 --> <a class="nav-link small" href="/Identity/Account/Login">Login</a> </div> </div> </div> <!-- Logo Nav START --> <nav class="navbar navbar-expand-lg"> <div class="container"> <!-- Logo START --> <a class="navbar-brand" href="/"> <img class="navbar-brand-item light-mode-item" src="https://image.blockchain.news/sharedimage/blockchain_Logo_black-02%20.jpg" alt="Blockchain.News Logo"> <img class="navbar-brand-item dark-mode-item" src="https://image.blockchain.news/sharedimage/blockchain_Logo_black-02%20.jpg" alt="Blockchain.News Logo"> </a> <!-- Logo END --> <!-- Responsive navbar toggler --> <button class="navbar-toggler ms-auto" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> <span class="text-body h6 d-none d-sm-inline-block">Menu</span> <span class="navbar-toggler-icon"></span> </button> <!-- Main navbar START --> <div class="collapse navbar-collapse" id="navbarCollapse"> <ul class="navbar-nav navbar-nav-scroll mx-auto"> <!-- Nav item 2 Pages --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="pagesMenu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">News</a> <ul class="dropdown-menu" aria-labelledby="pagesMenu"> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">Crypto News</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/tag/Bitcoin">Bitcoin News</a></li> <li><a class="dropdown-item" href="/tag/Ethereum">Ethereum News</a></li> <li><a class="dropdown-item" href="/tag/Cardano">Cardano News</a></li> <li><a class="dropdown-item" href="/tag/Ripple">Ripple News</a></li> <li><a class="dropdown-item" href="/tag/SHIB">SHIB News</a></li> <li><a class="dropdown-item" href="/tag/Stablecoin">Stablecoin News</a></li> <li><a class="dropdown-item" href="/tag/CBDC">CBDC News</a></li> <li><a class="dropdown-item" href="/tag/DeFi">DeFi News</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">Industry News</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/tag/NFT">NFT News</a></li> <li><a class="dropdown-item" href="/tag/Web3">Web3 News</a></li> <li><a class="dropdown-item" href="/tag/Metaverse">Metaverse News</a></li> <li><a class="dropdown-item" href="/tag/exchange">Exchange News</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">AI</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/tag/AI">AI News</a></li> <li><a class="dropdown-item" href="/tag/ChatGPT">ChatGPT News</a></li> </ul> </li> </ul> </li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/price">Price</a></li> <!-- Nav item 3 Post --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="postMenu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Hot AI Tools</a> <ul class="dropdown-menu" aria-labelledby="postMenu"> <li><a class="dropdown-item" href="/ai/elevenlabs">ElevenLabs</a></li> <li><a class="dropdown-item" href="/ai/stockimg-ai">Stockimg AI</a></li> <li><a class="dropdown-item" href="/ai/unscreen">Unscreen</a></li> <li><a class="dropdown-item" href="/ai/civitai">Civitai</a></li> <li><a class="dropdown-item" href="/ai/promptchan-ai">Promptchan AI</a></li> <li><a class="dropdown-item" href="/ai/crushon">Crushon AI</a></li> <li><a class="dropdown-item" href="/ai/candy-ai">Candy AI</a></li> <li><a class="dropdown-item" href="/ai/tavernai">TavernAI</a></li> <li><a class="dropdown-item" href="/ai/pfpmaker">PFPMaker</a></li> <li><a class="dropdown-item" href="/ai/fakeyou">FakeYou</a></li> <li><a class="dropdown-item" href="/ai/deepswap">DeepSwap</a></li> </ul> </li> <!-- Nav item 3 Post --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="postMenu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">AI Category</a> <ul class="dropdown-menu" aria-labelledby="postMenu"> <li><a class="dropdown-item" href="/ai">AI Homepage</a></li> <li><a class="dropdown-item" href="/ai/chatbot">Chatbot</a></li> <li><a class="dropdown-item" href="/ai/video-generator">Video Generator</a></li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">AI Image</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/image-generator">Image Generator</a></li> <li><a class="dropdown-item" href="/ai/image-enhancer">Image Enhancer</a></li> <li><a class="dropdown-item" href="/ai/image-editor">Image Editor</a></li> <li><a class="dropdown-item" href="/ai/stable-diffusion">Stable Diffusion</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">AI Audio</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/voice">Voice</a></li> <li><a class="dropdown-item" href="/ai/music-generator">Music Generator</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">NSFW AI</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/nsfw-character-ai-category">NSFW Character AI</a></li> <li><a class="dropdown-item" href="/ai/nsfw-chatbot">NSFW Chatbot</a></li> <li><a class="dropdown-item" href="/ai/nsfw-ai-image-generator">NSFW AI Image Generator</a></li> <li><a class="dropdown-item" href="/ai/ai-clothes-remover">AI clothes remover</a></li> <li><a class="dropdown-item" href="/ai/sexting">Sexting</a></li> <li><a class="dropdown-item" href="/ai/nsfw">All NSFW AI</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">AI Text</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/text-generator">Text Generator</a></li> <li><a class="dropdown-item" href="/ai/ai-detector">AI Detector</a></li> <li><a class="dropdown-item" href="/ai/summarizer">Summarizer</a></li> <li><a class="dropdown-item" href="/ai/poem-generator">AI Poem Generator</a></li> <li><a class="dropdown-item" href="/ai/plagiarism-checker">Plagiarism Checker</a></li> <li><a class="dropdown-item" href="/ai/ppt-summarizer">PPT Summarizer</a></li> <li><a class="dropdown-item" href="/ai/ai-paraphraser">AI Paraphraser</a></li> </ul> </li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="/ai/character">AI Character</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/ai-girlfriend">AI Girlfriend</a></li> <li><a class="dropdown-item" href="/ai/ai-boyfriend">AI Boyfriend</a></li> <li><a class="dropdown-item" href="/ai/waifu-generator">Waifu Generator</a></li> </ul> </li> <li><a class="dropdown-item" href="/ai/text-to-speech">Text to Speech</a></li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="/ai/educational">Educational</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/homework">Homework</a></li> <li><a class="dropdown-item" href="/ai/language-learning">Language Learning</a></li> </ul> </li> <li><a class="dropdown-item" href="/ai/search">AI Search</a></li> <li><a class="dropdown-item" href="/ai/job-and-career">Job and Career</a></li> <!-- Dropdown submenu --> <li class="dropdown-submenu dropend"> <a class="dropdown-item dropdown-toggle" href="#">Productivity</a> <ul class="dropdown-menu dropdown-menu-start" data-bs-popper="none"> <li><a class="dropdown-item" href="/ai/seo">SEO</a></li> <li><a class="dropdown-item" href="/ai/coding">Coding</a></li> </ul> </li> <li><a class="dropdown-item" href="/ai/ai-agent">AI Agent</a></li> <li><a class="dropdown-item" href="/ai/ai-prompt">AI Prompt</a></li> <li><a class="dropdown-item" href="/ai/category">ALL AI Categories</a></li> </ul> </li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/flashnews">FlashNews</a></li> <!-- Nav item 3 Post --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="postMenu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Press Release</a> <ul class="dropdown-menu" aria-labelledby="postMenu"> <li><a class="dropdown-item" href="/press release">Press Release</a></li> <li> <a class="dropdown-item" href="/Opinion">Opinion</a> </li> <li><a class="dropdown-item" href="/prnewswire">PR Newswire</a></li> <li><a class="dropdown-item" href="/businesswire">Business Wire</a></li> <li> <a class="dropdown-item" href="/Eventlist">Events</a> </li> </ul> </li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/analysis">Analysis</a></li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/interview">Interview</a></li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/wiki">Wiki</a></li> <!-- Nav item 5 link--> <li class="nav-item"> <a class="nav-link" href="/learn">Learn</a></li> <!-- Nav item 5 link--> </ul> </div> <!-- Main navbar END --> <!-- Nav right START --> <div class="nav flex-nowrap align-items-center"> <div class="nav-item dropdown dropdown-toggle-icon-none nav-search"> <a class="nav-link dropdown-toggle" role="button" href="#" id="navSearch" data-bs-toggle="dropdown" aria-expanded="false"> <i class="bi bi-search fs-4"></i> </a> <div class="dropdown-menu dropdown-menu-end shadow rounded p-2" aria-labelledby="navSearch"> <form class="input-group" action="/search" method="GET" id="searchForm"> <input class="form-control border-success" type="search" placeholder="Search" aria-label="Search" name="searchStr" id="searchInput"> <button class="btn btn-success m-0" type="submit">Search</button> </form> </div> </div> </div> <!-- Nav right END --> </div> </nav> <!-- Logo Nav END --> </header> <!-- ======================= Header END --> <!-- **************** MAIN CONTENT START **************** --> <main id="main"> <div class="snowfall-container"></div> <!-- 圣诞装饰元素 --> <div class="christmas-decorations"> <div class="christmas-bell top-left">🔔</div> <div class="christmas-tree top-right">🎄</div> <div class="christmas-gift bottom-left">🎁</div> <div class="christmas-star bottom-right">⭐</div> </div> <div id="santa-sleigh" class="d-none"> <div class="reindeer">🦌</div> <div class="sleigh-rope">➰</div> <div class="sleigh">🛷</div> </div> <!-- 在 _Layout.cshtml 的 main 标签附近添加 --> <div class="ai-assistant-trigger position-fixed d-flex align-items-center justify-content-center"> <div class="position-relative d-inline-block"> <a href="#" class="btn ai-button" data-bs-toggle="modal" data-bs-target="#chatModal"> <svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <!-- 头部天线 --> <path d="M12 1L12 3" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <path d="M10 3L14 3" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <!-- 机器人头部 --> <rect x="6" y="4" width="12" height="10" rx="2" fill="#1A1A1A" stroke="#00F0FF" stroke-width="1.5" /> <!-- 眼睛 --> <circle cx="9" cy="9" r="1.5" fill="#00F0FF"> <animate attributeName="opacity" values="1;0.5;1" dur="2s" repeatCount="indefinite" /> </circle> <circle cx="15" cy="9" r="1.5" fill="#00F0FF"> <animate attributeName="opacity" values="1;0.5;1" dur="2s" repeatCount="indefinite" /> </circle> <!-- 机器人身体 --> <path d="M8 14L8 19" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <path d="M16 14L16 19" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <path d="M6 20L10 20" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <path d="M14 20L18 20" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round" /> <!-- 数据流动效果 --> <path d="M4 8L2 8" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round"> <animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite" /> </path> <path d="M22 8L20 8" stroke="#00F0FF" stroke-width="1.5" stroke-linecap="round"> <animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite" /> </path> </svg> </a> <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger animate-pulse"> NEW </span> </div> </div> <!-- - - - - - - - - - - - - - Content - - - - - - - - - - - - - - - - --> <title>Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas - Blockchain.News</title> <!-- - - - - - - - - - - - - - Content - - - - - - - - - - - - - - - - --> <link rel="amphtml" href="https://blockchain.news/postamp?id=ripple-ceo-disagrees-coinbase-ceo-apolitical-work-policy-considers-relocating-overseas"> <!-- - - - - - - - - - - - - - Content - - - - - - - - - - - - - - - - --> <!-- **************** MAIN CONTENT START **************** --> <main> <!-- Divider --> <div class="border-bottom border-primary border-1 opacity-1"></div> <!-- ======================= Inner intro START --> <!-- ======================= Inner intro END --> <!-- ======================= Main START --> <section class="pt-0"> <div class="container position-relative" data-sticky-container> <div class="row"> <!-- Main Content START --> <!-- Image --> <div class="col-lg-8 mb-6"> <div id="post-container"> <div class="post"> <figure class="figure mt-2"> <h1>Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas</h1> <p > <a href="/Profile/Ellie-Suen" >Ellie Suen</a> <span class="publication-date ml-2"> Oct 27, 2020 02:00</span> </p> <p class="lead">Coinbase CEO Brian Armstrong has banned political discussions in the crypto work environment, a move that Ripple CEO Brad Garlinghouse disagrees with.</p> <a href="https://blockchainstock.azureedge.net:443/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" > <img class="rounded" src="https://blockchainstock.azureedge.net:443/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" alt="Ripple CEO Disagrees with Coinbase CEO's Apolitical Work Policy, Considers Relocating Overseas"> </a> </figure> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">There are fierce disputes about the upcoming US presidential election. Due to this, Coinbase CEO Brian Armstrong recently banned political discussions from the digital currency exchange work environment, consequently <a rel="nofollow" href="https://blockchain.news/news/workers-quit-coinbase-exchange-apolitical-stance">resulting in</a> 5% of Coinbase employees to leave the exchange, as a reaction to reject the “apolitical stance”.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><img src="https://blockchainstock.azureedge.net/features/B5EF8F556B76705615D83EC5C7E72EA474B43C29B2A3FFFAEF830DF9E82DAF26.jpg" width="971" height="510" /></span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Regarding Armstrong's actions, Ripple CEO Brad Garlinghouse disagreed with the stand. In an <a rel="nofollow" href="https://www.cnbc.com/2020/10/26/ripple-ceo-brad-garlinghouse-on-coinbases-apolitical-culture.html">interview</a> with CNBC, the Ripple CEO said:</span></p> <blockquote> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">"We think about our mission as enabling an internet of value but we seek positive outcomes for society...I think tech companies have an opportunity — but actually an obligation — to lean into being part of the solution.”</span></p> </blockquote> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">The difference between the Coinbase and Ripple CEO seems to not only restricted to their political stance but also extends to their views regarding cryptocurrency regulations.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">For Coinbase, which operates as a fully regulated crypto exchange, one of its core advantages is simply that it has a comprehensive regulatory framework and holds a series of financial licenses, such as the FCA Payments License. Coinbase has no concerns regarding crypto regulations. However,</span><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"> it may even benefit from tightening regulations as most <a style='color:orange' rel="nofollow" href='/tag/Bitcoin' target='_blank'><u><b><i><dfn data-info='Bitcoin (BTC) is the world’s first open-source, peer-to-peer cryptocurrency developed by a pseudonymous person or group of people under the ...'>Bitcoin</dfn></i></b></u></a> and other crypto-related projects or companies are unregistered or without a license.</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">In contrast, Ripple, as a payment, remittance, and settlement network, has had a record of being at the receiving end of punitive sanctions from the US Securities and Exchange Commission (SEC), as cited in the "Regulation Enforcement Framework" report <a rel="nofollow" href="https://blockchain.news/news/us-department-of-justice-releases-cryptocurrency-enforcement-framework">published</a> by the US Department of Justice (<a style='color:orange' rel="nofollow" href='/tag/DoJ' target='_blank'><u><b><i><dfn data-info='DoJ stands for the United States Department of Justice which is responsible for the enforcement of the law and administration of justice....'>DoJ</dfn></i></b></u></a>). After the issuance of the report, Brad Garlinghouse reacted and tweeted intensively in response. He appeared to be critical of the Regulation Enforcement Framework, thinking it would stifle technological and financial innovation. </span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">The Ripple CEO added that the lack of crypto regulations in the United States would make it trail behind China and other countries in terms of innovation and competition in future financial infrastructure. </span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;">Garlinghouse has enjoyed the wealth and fame brought upon by the influence and XRP price growth in recent years. Now, the tightening of cryptocurrency regulations may have pushed unprecedented pressure on the Ripple CEO, who has hinted on Twitter that he may move Ripple's operations out of the United States, as confirmed by CNBC. </span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"> Last week, Garlinghouse told CNBC that Ripple is considering relocating to another country due to a lack of regulatory clarity around cryptocurrencies.</span></p><font ><i>Image source: Shutterstock</i></font> <!-- Divider --> <ul class="list-inline"> <li class="list-inline-item"><a href="/search/bitcoin" class="btn btn-sm btn-primary-soft">bitcoin</a></li> <li class="list-inline-item"><a href="/search/ripple" class="btn btn-sm btn-primary-soft">ripple</a></li> <li class="list-inline-item"><a href="/search/xrp" class="btn btn-sm btn-primary-soft">xrp</a></li> <li class="list-inline-item"><a href="/search/ripple news" class="btn btn-sm btn-primary-soft">ripple news</a></li> <li class="list-inline-item"><a href="/search/coinbase" class="btn btn-sm btn-primary-soft">coinbase</a></li> <li class="list-inline-item"><a href="/search/politics" class="btn btn-sm btn-primary-soft">politics</a></li> <li class="list-inline-item"><a href="/search/united states" class="btn btn-sm btn-primary-soft">united states</a></li> </ul> <!-- Author info END --> <!-- Divider --> </div> </div> <!-- Loading indicator --> <div id="loading" style="display: none;"> Loading more posts... </div> <!-- Intersection observer target --> <div id="observer-target"></div> </div> <!-- Main Content END --> <!-- Right sidebar START --> <div class="col-lg-4"> <div data-sticky data-margin-top="80" data-sticky-for="991"> <!-- Most read --> <div> <div class="card @* border *@ h-100"> <!-- Card header --> <div class="card-header border-bottom p-3"> <h5 class="card-header-title mb-0">Flash News</h5> </div> <!-- Card body START --> <div class="card-body p-3"> <div class="row"> <!-- Blog item --> <div class="col-12"> <div class="d-flex align-items-center position-relative"> <div class="ms-3"> <a href="/flashnews/https://twitter.com/OnchainDataNerd/status/1869001863301153007" class="h6 stretched-link">Bitcoin Reaches $106k, Solv Protocol Gains Trust with $2.65B in BTC Reserves</a> <p class="small mb-0">12/17/2024 12:49:03 PM</p> </div> </div> </div> <!-- Divider --> <hr class="my-3"> <!-- Blog item --> <div class="col-12"> <div class="d-flex align-items-center position-relative"> <div class="ms-3"> <a href="/flashnews/https://twitter.com/GreeksLive/status/1868999997980876886" class="h6 stretched-link">Upcoming Interest Rate Announcements by Major Central Banks</a> <p class="small mb-0">12/17/2024 12:41:38 PM</p> </div> </div> </div> <!-- Divider --> <hr class="my-3"> <!-- Blog item --> <div class="col-12"> <div class="d-flex align-items-center position-relative"> <div class="ms-3"> <a href="/flashnews/https://twitter.com/EmberCN/status/1868990597706764781" class="h6 stretched-link">Pendle Ecosystem Fund Transfers $3.49 Million in PENDLE to Binance</a> <p class="small mb-0">12/17/2024 12:04:17 PM</p> </div> </div> </div> <!-- Divider --> <hr class="my-3"> <!-- Blog item --> <div class="col-12"> <div class="d-flex align-items-center position-relative"> <div class="ms-3"> <a href="/flashnews/https://twitter.com/CryptoMichNL/status/1868980836315652415" class="h6 stretched-link">CryptoMichNL Highlights $LVVA Token Sale and Upcoming TGE</a> <p class="small mb-0">12/17/2024 11:25:30 AM</p> </div> </div> </div> <!-- Divider --> <hr class="my-3"> <!-- Blog item --> <div class="col-12"> <div class="d-flex align-items-center position-relative"> <div class="ms-3"> <a href="/flashnews/https://twitter.com/BitMEXResearch/status/1868978651741798835" class="h6 stretched-link">BitMEX Research Highlights Conflict of Interest at Lego</a> <p class="small mb-0">12/17/2024 11:16:49 AM</p> </div> </div> </div> <!-- Divider --> <hr class="my-3"> </div> </div> <!-- Card body END --> </div> </div> <!-- Advertisement --> <div class="mt-4"> <a href="#" class="d-block card-img-flash"> <img src="/bn/images/adv.png" alt=""> <p>Email us at info@blockchain.news</p> </a> </div> </div> </div> <!-- Right sidebar END --> </div> </div> </section> <!-- ======================= Main END --> <!-- ======================= Sticky post START --> <!-- ======================= Sticky post END --> </main> <!-- **************** MAIN CONTENT END **************** --> <!-- - - - - - - - - - - - - end Content - - - - - - - - - - - - - - - --> <section></section> <!-- - - - - - - - - - - - - end Content - - - - - - - - - - - - - - - --> </main> <!-- ======================= Footer START --> <footer class="bg-dark pt-5"> <div class="container"> <!-- About and Newsletter START --> <div class="row pt-3 pb-4"> <div class="col-md-3"> <img src="https://image.blockchain.news/sharedimage/blockchain_Logo_black-02%20.jpg" width="286" height="70" alt="footer logo"> </div> <div class="col-md-5"> <p class="text-body-secondary">Welcome to your premier source for the latest in AI, cryptocurrency, blockchain, and AI search tools—driving tomorrow's innovations today.</p> </div> <div class="col-md-4"> <!-- Form --> <form class="input-group" action="/AI" method="GET"> <div class="col-12"> <input type="search" name="search" class="form-control" placeholder="Search AI with AI"> </div> <div class="col-12"> <button type="submit" class="btn btn-primary m-0">AI Search</button> </div> <div class="form-text mt-2"> By searching you agree to our <a href="/privacy" class="text-decoration-underline text-reset">Privacy Policy</a> </div> </form> </div> </div> <!-- About and Newsletter END --> <!-- Divider --> <hr> <!-- Widgets START --> <div class="row pt-5"> <!-- Footer Widget --> <div class="col-md-6 col-lg-3 mb-4"> <h5 class="mb-4 text-white">Recommended AI tools</h5> <!-- Item --> <div class="mb-4 position-relative"> <div><a href="/ai/chatbot" class="badge text-bg-danger mb-2"><i class="fas fa-circle me-2 small fw-bold"></i>Chatbot</a></div> <a href="/ai/chatgpt" class="btn-link text-white fw-normal">ChatGPT</a> </div> <!-- Item --> <div class="mb-4 position-relative"> <div><a href="/ai/search" class="badge text-bg-info mb-2"><i class="fas fa-circle me-2 small fw-bold"></i>AI Search</a></div> <a href="ai/search" class="btn-link text-white fw-normal">Andi AI</a> </div> </div> <!-- Footer Widget --> <div class="col-md-6 col-lg-3 mb-4"> <h5 class="mb-4 text-white">ABOUT</h5> <div class="row"> <div class="col-6"> <ul class="nav flex-column text-primary-hover"> <li class="nav-item"><a class="nav-link" href="/about">About US</a></li> <li class="nav-item"><a class="nav-link" href="/Advertisement">Advertisement</a></li> </ul> </div> </div> </div> <!-- Footer Widget --> <div class="col-sm-6 col-lg-3 mb-4"> <h5 class="mb-4 text-white">Get Regular Updates</h5> <ul class="nav flex-column text-primary-hover"> <li class="nav-item"><a class="nav-link pt-0" href="https://www.linkedin.com/company/blockchainnewsbn/"><i class="fab fa-linkedin"></i></a>Linkedin</a></li> <li class="nav-item"><a class="nav-link" href="https://twitter.com/BlockchainNewsM"><i class="fab fa-twitter-square"></i>Twitter</a></li> <li class="nav-item"><a class="nav-link" href="#"><i class="far fa-envelope fa-fw me-2"></i>Newsletters</a></li> <li class="nav-item"><a class="nav-link" href="/feed"><i class="far fa-envelope fa-fw me-2"></i>Rss</a></li> </ul> </div> <!-- Footer Widget --> <div class="col-sm-6 col-lg-3 mb-4"> <h5 class="mb-4 text-white">Disclaimer</h5> <p class="text-body-secondary"> Disclaimer: Blockchain.news provides content for informational purposes only. In no event shall blockchain.news be responsible for any direct, indirect, incidental, or consequential damages arising from the use of, or inability to use, the information provided. This includes, but is not limited to, any loss or damage resulting from decisions made based on the content. Readers should conduct their own research and consult professionals before making financial decisions. </p> </div> </div> <!-- Widgets END --> <!-- Hot topics START --> <div class="row"> <h5 class="mb-2 text-white">Hot topics</h5> <ul class="list-inline text-primary-hover lh-lg"> <li class="list-inline-item"><a href="/tag/chatgpt">ChatGPT News</a></li> <li class="list-inline-item"><a href="/ai/nsfw">NSFW</a></li> <li class="list-inline-item"><a href="/search/agi">Artificial General Intelligence</a></li> <li class="list-inline-item"><a href="/tag/bitcoin">Bitcoin</a></li> <li class="list-inline-item"><a href="/tag/ethereum">Ethereum</a></li> <li class="list-inline-item"><a href="/ai/image-generator">Image Generator</a></li> <li class="list-inline-item"><a href="/tag/web3">Web 3.0</a></li> </ul> </div> <!-- Hot topics END --> </div> <!-- Footer copyright START --> <div class="bg-dark-overlay-3 mt-5"> <div class="container"> <div class="row align-items-center justify-content-md-between py-4"> <div class="col-md-6"> <!-- Copyright --> <div class="text-center text-md-start text-primary-hover text-body-secondary"> ©2024 <a href="https://blockchain.news/" class="text-reset btn-link" target="_blank">Blockchain News</a>. All rights reserved </div> </div> <div class="col-md-6 d-sm-flex align-items-center justify-content-center justify-content-md-end"> <!-- Language switcher --> <div class="dropup me-0 me-sm-3 mt-3 mt-md-0 text-center text-sm-end"> <a class="dropdown-toggle text-primary-hover" href="#" role="button" id="languageSwitcher" data-bs-toggle="dropdown" aria-expanded="false"> English Edition </a> <ul class="dropdown-menu min-w-auto" aria-labelledby="languageSwitcher"> <li><a class="dropdown-item" href="https://cn.blockchain.news">中文</a></li> </ul> </div> <!-- Links --> <ul class="nav text-primary-hover text-center text-sm-end justify-content-center justify-content-center mt-3 mt-md-0"> <li class="nav-item"><a class="nav-link" href="/termsandconditions">Terms</a></li> <li class="nav-item"><a class="nav-link" href="/privacy">Privacy</a></li> <li class="nav-item"><a class="nav-link pe-0" href="#">Cookies</a></li> </ul> </div> </div> </div> </div> <!-- Footer copyright END --> </footer> <!-- ======================= Footer END --> <!-- Back to top --> <div class="back-top"><i class="bi bi-arrow-up-short"></i></div> <!-- ======================= JS libraries, plugins and custom scripts --> <!-- Bootstrap JS --> <script src="/bn/vendor/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <!-- Vendors --> <script src="/bn/vendor/tiny-slider/tiny-slider.js"></script> <script src="/bn/vendor/sticky-js/sticky.min.js"></script> <script src="/bn/vendor/vanilla-lazyload/lazyload.min.js"></script> <script src="/assets/js/chatbot.js"></script> <script src="/bn/vendor/langchain/langgraph-sdk/dist/utils/async_caller.js"></script> <!-- Template Functions --> <script src="/bn/js/functions.js"></script> <script> document.addEventListener('DOMContentLoaded', function () { document.getElementById('searchForm').addEventListener('submit', function (event) { var bannedWords = ["buy weed", "zachyman", "cannabis", "cocaine", "Xanax", "Live Rosin", "blendzhub"]; var userInput = document.getElementById('searchInput').value.toLowerCase(); for (var i = 0; i < bannedWords.length; i++) { if (userInput.includes(bannedWords[i])) { alert("Your search query contains prohibited terms and has been logged. Please revise your query and try again."); event.preventDefault(); return; // Stop further execution } } }); }); </script> <script> document.addEventListener('DOMContentLoaded', function() { // 初始化变量 const container = document.querySelector('.snowfall-container'); const snowflakeTypes = ['❄', '❅', '❆']; let snowfallInterval; let currentSpeed = 'normal'; let isSnowing = true; // 创建雪花函数 function createSnowflake() { const snowflake = document.createElement('div'); snowflake.className = 'snowflake'; snowflake.innerHTML = snowflakeTypes[Math.floor(Math.random() * snowflakeTypes.length)]; snowflake.style.left = Math.random() * 100 + 'vw'; snowflake.style.opacity = Math.random() * 0.5 + 0.5; snowflake.style.fontSize = (Math.random() * 0.4 + 0.8) + 'em'; snowflake.style.animation = `snowfall ${Math.random() * 3 + 3}s linear infinite`; container.appendChild(snowflake); setTimeout(() => { snowflake.remove(); }, 5000); } // 控制雪花速度 function toggleSnowSpeed() { clearInterval(snowfallInterval); switch(currentSpeed) { case 'normal': currentSpeed = 'stopped'; isSnowing = false; break; case 'stopped': currentSpeed = 'slow'; isSnowing = true; snowfallInterval = setInterval(createSnowflake, 300); break; case 'slow': currentSpeed = 'normal'; isSnowing = true; snowfallInterval = setInterval(createSnowflake, 150); break; } } // 修改铃铛动画函数 function playSleighAnimation() { const sleigh = document.getElementById('santa-sleigh'); sleigh.classList.remove('d-none'); sleigh.classList.add('sleigh-animation'); // 6秒后重置动画 setTimeout(() => { sleigh.classList.add('d-none'); sleigh.classList.remove('sleigh-animation'); }, 6000); } // 礼物爆炸效果 function explodeGifts() { console.log('explodeGifts called'); // 调试日志 const gifts = ['🧦', '🍬', '🎁', '🎄', '🔔', '🕯️', '🍪', '⛄']; const numGifts = 12; const clickPosition = { x: event.clientX, y: event.clientY }; // 获取点击位置 for(let i = 0; i < numGifts; i++) { const gift = document.createElement('div'); gift.className = 'gift-item'; gift.textContent = gifts[Math.floor(Math.random() * gifts.length)]; // 设置初始位置为点击位置 gift.style.left = `${clickPosition.x}px`; gift.style.top = `${clickPosition.y}px`; const angle = (i / numGifts) * 360; const distance = 100 + Math.random() * 100; const tx = Math.cos(angle * Math.PI / 180) * distance; const ty = Math.sin(angle * Math.PI / 180) * distance; gift.style.setProperty('--tx', `${tx}px`); gift.style.setProperty('--ty', `${ty}px`); gift.style.setProperty('--tr', `${Math.random() * 360}deg`); document.body.appendChild(gift); console.log(`Gift created at position: ${clickPosition.x}, ${clickPosition.y}`); // 调试日志 setTimeout(() => { gift.remove(); console.log('Gift removed'); // 调试日志 }, 1000); } } // 创建伯利恒之星 function createBethlehemStar(x, y) { const container = document.createElement('div'); container.className = 'bethlehem-star-container'; container.style.left = `${x}px`; container.style.top = `${y}px`; // 创建中心星 const centerStar = document.createElement('div'); centerStar.className = 'bethlehem-star-center'; container.appendChild(centerStar); // 创建光芒 for(let i = 0; i < 8; i++) { const ray = document.createElement('div'); ray.className = 'bethlehem-star-ray'; ray.style.transform = `rotate(${i * 45}deg)`; container.appendChild(ray); } document.body.appendChild(container); // 动画结束后移除 setTimeout(() => { container.style.opacity = '0'; setTimeout(() => container.remove(), 1000); }, 2000); } // 初始化装饰元素 function initializeDecorations() { const tree = document.querySelector('.christmas-tree'); const bell = document.querySelector('.christmas-bell'); const gift = document.querySelector('.christmas-gift'); const star = document.querySelector('.christmas-star'); if(tree) { const newTree = tree.cloneNode(true); tree.parentNode.replaceChild(newTree, tree); newTree.onclick = function(e) { e.preventDefault(); e.stopPropagation(); console.log('树被点击'); toggleSnowSpeed(); }; } if(bell) { const newBell = bell.cloneNode(true); bell.parentNode.replaceChild(newBell, bell); newBell.onclick = function(e) { e.preventDefault(); e.stopPropagation(); console.log('铃铛被点击'); playSleighAnimation(); }; } if(gift) { const newGift = gift.cloneNode(true); gift.parentNode.replaceChild(newGift, gift); newGift.onclick = function(e) { e.preventDefault(); e.stopPropagation(); console.log('礼物被点击'); explodeGifts.call(this, e); }; } // 在初始化装饰元素函数中修改star的点击处理 if(star) { const newStar = star.cloneNode(true); star.parentNode.replaceChild(newStar, star); // 添加鼠标悬停效果 newStar.onmouseover = function() { this.style.transform = 'scale(1.1)'; }; newStar.onmouseout = function() { this.style.transform = 'scale(1)'; }; // 点击效果 newStar.onclick = function(e) { e.preventDefault(); e.stopPropagation(); console.log('星星被点击'); const rect = this.getBoundingClientRect(); createBethlehemStar(rect.left + rect.width/2, rect.top + rect.height/2); }; } } // 鼠标移动效果 document.addEventListener('mousemove', function(e) { const snowflakes = document.querySelectorAll('.snowflake'); snowflakes.forEach(snowflake => { const rect = snowflake.getBoundingClientRect(); const distance = Math.sqrt( Math.pow(e.clientX - rect.left, 2) + Math.pow(e.clientY - rect.top, 2) ); if (distance < 100) { snowflake.style.transform += ' scale(1.2)'; } }); }); // 初始化 initializeDecorations(); snowfallInterval = setInterval(createSnowflake, 150); // 添加调试日志 console.log('装饰元素初始化完成'); console.log('Tree:', document.querySelector('.christmas-tree')); console.log('Bell:', document.querySelector('.christmas-bell')); console.log('Gift:', document.querySelector('.christmas-gift')); console.log('Star:', document.querySelector('.christmas-star')); }); </script> <script type="module"> import { Client } from "https://esm.sh/@langchain/langgraph-sdk@0.0.31"; document.addEventListener('DOMContentLoaded', function () { // 获取元素引用 const messageInput = document.getElementById('messageInput'); const sendButton = document.getElementById('sendButton'); const chatForm = document.getElementById('chatForm'); let messages = []; let isLoading = false; // 确保元素存在 if (!messageInput || !sendButton || !chatForm) { console.error('Required elements not found'); return; } // 启用输入 function enableInput() { messageInput.disabled = false; sendButton.disabled = false; } // 禁用输入 function disableInput() { messageInput.disabled = true; sendButton.disabled = true; } // 添加消息到界面 function addMessage(content, role) { const messagesContainer = document.getElementById('chatMessages'); const messageDiv = document.createElement('div'); messageDiv.classList.add('message', `${role}-message`); messageDiv.textContent = content; messagesContainer.appendChild(messageDiv); messagesContainer.scrollTop = messagesContainer.scrollHeight; } // 初始化聊天客户端 async function initChatClient() { try { const response = await fetch('/api/chat/config'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const config = await response.json(); return new Client({ apiUrl: config.apiUrl, apiKey: config.apiKey, timeoutMs: 30000, }); } catch (error) { console.error('配置获取错误:', error); throw new Error("无法获取配置信息: " + error.message); } } // 处理提交 async function handleSubmit(e) { if (e) { e.preventDefault(); e.stopPropagation(); } const input = messageInput.value.trim(); if (!input || isLoading) return; // 清空输入并禁用 messageInput.value = ''; disableInput(); isLoading = true; // 添加用户消息 addMessage(input, 'user'); messages.push({ role: 'user', content: input }); // 添加加载指示器 const loadingIndicator = document.createElement('div'); loadingIndicator.classList.add('typing-indicator'); loadingIndicator.innerHTML = '<span></span><span></span><span></span>'; document.getElementById('chatMessages').appendChild(loadingIndicator); try { const client = await initChatClient(); // 获取助手列表 const assistants = await client.assistants.search({ metadata: null, offset: 0, limit: 10, }); // 使用第一个助手 const agent = assistants[0]; // 创建新的对话线程 const thread = await client.threads.create(); // 开始流式响应 const streamResponse = client.runs.stream( thread["thread_id"], agent["assistant_id"], { input: { messages: [{ role: "human", content: input }] }, } ); // 处理流式响应 for await (const chunk of streamResponse) { if (chunk.event === "values") { if (chunk.data.messages.length > 1 && chunk.data.messages[1].type === "ai") { const answer = chunk.data.messages[1].content; // 更新或添加助手消息 const lastMessage = messages[messages.length - 1]; if (lastMessage && lastMessage.role === 'assistant') { lastMessage.content = answer; // 更新DOM中的最后一条消息 const lastMessageElement = document.querySelector('.chat-messages .bot-message:last-child'); if (lastMessageElement) { lastMessageElement.textContent = answer; } } else { messages.push({ role: 'assistant', content: answer }); addMessage(answer, 'bot'); } } } } } catch (error) { console.error('Error:', error); const errorMessage = error instanceof Error ? error.message : '未知错误'; addMessage(`错误: ${errorMessage}`, 'bot'); messages.push({ role: 'assistant', content: `错误: ${errorMessage}` }); } finally { const indicator = document.querySelector('.typing-indicator'); if (indicator) { indicator.remove(); } isLoading = false; enableInput(); } } // 绑定表单提交事件 chatForm.addEventListener('submit', function (e) { // 这里也要阻止默认行为 e.preventDefault(); e.stopPropagation(); handleSubmit(e); }); // 绑定回车键事件 messageInput.addEventListener('keypress', function (e) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); e.stopPropagation(); handleSubmit(e); } }); // 模态框关闭时清空聊天 const chatModal = document.getElementById('chatModal'); if (chatModal) { chatModal.addEventListener('hidden.bs.modal', function () { const chatMessages = document.getElementById('chatMessages'); if (chatMessages) { chatMessages.innerHTML = ''; } messages = []; messageInput.value = ''; }); } // 初始启用输入 enableInput(); });</script> <script> let nextPostUrl = '/news/chinas-dcep-will-not-compete-with-wechat-and-alipay'; let loading = false; let loadedPosts = 1; const observerTarget = document.getElementById('observer-target'); const postContainer = document.getElementById('post-container'); const loadingIndicator = document.getElementById('loading'); const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting && !loading && nextPostUrl) { loadNextPost(); } }, { rootMargin: '200px' }); observer.observe(observerTarget); async function loadNextPost() { if (loading || !nextPostUrl) { console.log('Loading stopped: loading =', loading, 'nextPostUrl =', nextPostUrl); return; } loading = true; loadingIndicator.style.display = 'block'; console.log('Loading next post from:', nextPostUrl); try { const response = await fetch(nextPostUrl); if (!response.ok) throw new Error('Network response was not ok'); const html = await response.text(); console.log('Fetched HTML:', html.substring(0, 200) + '...'); // Log the first 200 characters const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const newPostContainer = doc.getElementById('post-container'); if (!newPostContainer) { console.error('Could not find post container in loaded content'); throw new Error('Could not find post container in loaded content'); } const newPost = newPostContainer.querySelector('.post'); if (!newPost) { console.error('Could not find new post in loaded content'); throw new Error('Could not find new post in loaded content'); } console.log('New post found:', newPost.outerHTML.substring(0, 200) + '...'); postContainer.appendChild(newPost); loadedPosts++; console.log('Post appended, total posts:', loadedPosts); const currentPostUrl = new URL(nextPostUrl, window.location.origin).pathname; history.pushState({ postId: loadedPosts }, '', currentPostUrl); document.title = doc.title || document.title; nextPostUrl = findNextPostUrl(doc); console.log('Next post URL:', nextPostUrl); if (!nextPostUrl) { console.log('No more posts to load'); observer.unobserve(observerTarget); } } catch (error) { console.error('Error loading next post:', error); nextPostUrl = null; } finally { loading = false; loadingIndicator.style.display = 'none'; } } function findNextPostUrl(doc) { const scriptContent = doc.querySelector('script'); if (scriptContent) { const match = scriptContent.textContent.match(/let nextPostUrl = '(.+)';/); if (match) return match[1]; } return null; } window.addEventListener('popstate', function (event) { if (event.state && event.state.postId) { const posts = postContainer.querySelectorAll('.post'); if (posts.length >= event.state.postId) { posts[event.state.postId - 1].scrollIntoView({ behavior: 'smooth' }); } } }); </script> <!-- Chat Modal --> <div class="modal fade" id="chatModal" tabindex="-1" aria-labelledby="chatModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="chatModalLabel">AI Chat</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="chat-container"> <div class="chat-messages" id="chatMessages"> <!-- Messages will appear here --> </div> <div class="chat-input"> <form id="chatForm"> <div class="input-group"> <input type="text" class="form-control" id="messageInput" placeholder="Type your message..."> <button type="submit" class="btn btn-primary" id="sendButton"> Send </button> </div> </form> </div> </div> </div> </div> </div> </div> </body> </html>