Give SOL to Copy Address
使用 SOL 向 luozhsky 打赏,数额会 100% 进入 luozhsky 的钱包。
luozhsky

luozhsky

V2EX 第 251865 号会员,加入于 2017-09-01 08:48:37 +08:00
今日活跃度排名 5058
根据 luozhsky 的设置,主题列表只有在你登录之后才可查看
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
luozhsky 最近回复了
又更新了一个版本..效果如下图吧..

安装: https://greasyfork.org/zh-CN/scripts/545123-v2ex-solana-balance-checker

1 天前
回复了 BeCool 创建的主题 分享创造 生成一个 V2EX 结尾的 solana 地址
@kaichen 就算所有 holder 都改成 V2EX 后缀的地址..几千个而已..真的有影响么...

数量级在那呢。你要说被破解率上升了 1000 倍是吧...

一滴水和一杯水放到大海里,有区别么?
@Sor 你这就是没学全。jito 关闭后 Solana 已经没有公共交易池了,不下到给节点上根本不会被夹。
2 天前
回复了 gzldc 创建的主题 Solana 5000 枚$v2ex 空投 留下你的地址
AYzM2axiQg7LRSYFdP2W37kBk8VVWRLAinZVWMvK6kC6
3 天前
回复了 ooTwToo 创建的主题 Solana 老弟,$V2EX 我跑了
翻倍出本,利润在手才能拿得稳
4 天前
回复了 conge 创建的主题 Solana 哈哈哈,我把 /solana/hello-world 给清空啦
老哥给力。
唔,增加了几个节点和夜间模式的支持..
```
// ==UserScript==
// @name V2EX Solana Balance Checker 0.7
// @namespace http://tampermonkey.net/
// @version 0.7
// @description Uses JavaScript to read and apply V2EX's native theme colors for perfect integration. Includes auto RPC-node failover.
// @author Gemini
// @match https://ex.noerr.eu.org/member/*
// @match https://ex.noerr.eu.org/member/*
// @match https://*.ex.noerr.eu.org/member/*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @connect api.mainnet-beta.solana.com
// @connect rpc.ankr.com
// @connect solana-mainnet.rpc.extrnode.com
// ==/UserScript==

(function() {
'use strict';

// 1. Configuration
const v2exTokenMintAddress = '9raUVuzeWUk53co63M4WXLWPWE4Xc6Lpn7RS9dnkpump';
const RPC_ENDPOINTS = [ 'https://rpc.ankr.com/solana', 'https://api.mainnet-beta.solana.com', 'https://solana-mainnet.rpc.extrnode.com' ];

function findAddressOnPage() {
const scripts = document.querySelectorAll('script');
for (const script of scripts) {
if (script.textContent.includes('const address =')) {
const match = script.textContent.match(/const address = "([1-9A-HJ-NP-Za-km-z]{32,44})";/);
if (match && match[1]) { return match[1]; }
}
}
return null;
}

const userSolanaAddress = findAddressOnPage();
if (!userSolanaAddress) { return; }

// 2. Add base styles for LAYOUT ONLY.
GM_addStyle(`
.solana-balance-box { background-color: var(--box-background-color); border-bottom: 1px solid var(--box-border-color); margin-bottom: 20px; }
.solana-balance-table { width: 100%; border-collapse: collapse; table-layout: fixed; margin-bottom: -1px; }
.solana-balance-table th, .solana-balance-table td { padding: 12px; text-align: left; border-top: 1px solid var(--box-border-color); font-size: 14px; line-height: 1.6; }
.solana-balance-table th { background-color: var(--box-header-background-color); font-weight: bold; }
.solana-balance-table td { font-family: var(--mono-font); word-wrap: break-word; }
.solana-balance-table th:nth-child(1) { width: 60%; } .solana-balance-table th:nth-child(2) { width: 20%; } .solana-balance-table th:nth-child(3) { width: 20%; }
`);

// 3. Create and insert DOM elements
const container = document.createElement('div');
container.className = 'solana-balance-box';
const table = document.createElement('table');
table.className = 'solana-balance-table';
const headerRow = table.insertRow();
headerRow.innerHTML = '<th>Address</th><th>SOL</th><th>$V2EX</th>';
const dataRow = table.insertRow();
const addressCell = dataRow.insertCell();
const solBalanceCell = dataRow.insertCell();
const tokenBalanceCell = dataRow.insertCell();
addressCell.textContent = userSolanaAddress;
solBalanceCell.textContent = 'Loading...';
tokenBalanceCell.textContent = 'Loading...';
container.appendChild(table);
const mainInfoBox = document.querySelector('#Main .box');
if (mainInfoBox) {
mainInfoBox.parentNode.insertBefore(container, mainInfoBox.nextSibling);
}

// 4. JavaScript function to READ and APPLY native text colors for BOTH headers and data
function updateTextColorsForTheme() {
// Read the actual color values V2EX is currently using
const nativeHeaderTextColor = getComputedStyle(document.body).getPropertyValue('--box-header-text-color').trim();
const nativeTextColor = getComputedStyle(document.body).getPropertyValue('--box-foreground-color').trim();
const nativeFadeColor = getComputedStyle(document.body).getPropertyValue('--color-fade').trim();

// --- FIX: Apply color to table headers (th) ---
const headers = table.querySelectorAll('th');
for (const header of headers) {
// By changing this to nativeTextColor, the header color will match the data cell color.
header.style.setProperty('color', nativeTextColor, 'important');
}

// --- Apply color to table data (td) ---
const cells = [addressCell, solBalanceCell, tokenBalanceCell];
for (const cell of cells) {
if (cell.textContent === 'Loading...' || cell.textContent === 'Error') {
cell.style.setProperty('color', nativeFadeColor, 'important');
} else {
cell.style.setProperty('color', nativeTextColor, 'important');
}
}
}

// 5. Observer to detect theme changes in real-time
const themeObserver = new MutationObserver(() => updateTextColorsForTheme());
themeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
updateTextColorsForTheme();

// 6. Fetch data
function makeRpcRequest(requestPayload, onSuccess, onFailure) {
let endpointIndex = 0;
function tryNextEndpoint() {
if (endpointIndex >= RPC_ENDPOINTS.length) { if (onFailure) onFailure(); return; }
const currentEndpoint = RPC_ENDPOINTS[endpointIndex++];
GM_xmlhttpRequest({
method: 'POST', url: currentEndpoint, headers: { 'Content-Type': 'application/json' },
data: JSON.stringify(requestPayload), timeout: 8000,
onload: function(response) {
try { const data = JSON.parse(response.responseText); if (data.error) { tryNextEndpoint(); } else { onSuccess(data); } }
catch (e) { tryNextEndpoint(); }
},
onerror: tryNextEndpoint, ontimeout: tryNextEndpoint
});
}
tryNextEndpoint();
}

function getSolBalance() {
makeRpcRequest({ jsonrpc: '2.0', id: 1, method: 'getBalance', params: [userSolanaAddress] },
(data) => { solBalanceCell.textContent = `${(data.result.value / 1e9).toFixed(6)}`; updateTextColorsForTheme(); },
() => { solBalanceCell.textContent = 'Error'; updateTextColorsForTheme(); }
);
}
function getTokenBalance() {
makeRpcRequest({ jsonrpc: '2.0', id: 1, method: 'getTokenAccountsByOwner', params: [userSolanaAddress, { mint: v2exTokenMintAddress }, { encoding: 'jsonParsed' }] },
(data) => { tokenBalanceCell.textContent = data.result.value.length > 0 ? data.result.value[0].account.data.parsed.info.tokenAmount.uiAmountString : '0'; updateTextColorsForTheme(); },
() => { tokenBalanceCell.textContent = 'Error'; updateTextColorsForTheme(); }
);
}

getSolBalance();
getTokenBalance();

})();
```
https://www.geckoterminal.com/solana/pools/CtxHhwboVTtRf1kC4Zwfz8Zf8bNW78N2uuR3oZX5VFKb

如果你们玩币..就会知道..这种工具类型的网站有非常非常多了....
12 天前
回复了 Pantheonn 创建的主题 游戏 三天狂肝 160h ,这游戏比文明 6 还上瘾
科雷的游戏都很硬核...基本都是百小时入门的...
16 天前
回复了 LiuJiang 创建的主题 游戏 对明末感到失望
笑出声,怎么看待《明末:渊虚之羽》收回了标准版 key 中误发的豪华版武器,主角衣服也一并消失?

真是灾难级运营的典型 case.
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 12:52 · PVG 20:52 · LAX 05:52 · JFK 08:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.