Add EIP-6963 multi-wallet picker to the join tools
Both /join-now and /direct-join now discover every injected wallet (Brave, MetaMask, SafePal, Trust, Coinbase…) via EIP-6963 and, when more than one is present, show a 'Choose your wallet' picker on connect — instead of blindly grabbing window.ethereum (which silently hangs when e.g. Brave's built-in wallet wins the slot). Shared public/rmc-wallet.js; provider resolved on connect and wallet events bound once after. Falls back to window.ethereum for legacy single-provider wallets. CSP-safe (6963 icons are data URIs). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+16
-14
@@ -18,7 +18,7 @@
|
||||
var LEVELS=['','Scintilla','Ascensus','Fabrica','Culmen','Apex','Fastigium','Vertex','Corona'];
|
||||
|
||||
var $=function(id){return document.getElementById(id);};
|
||||
var eth=window.ethereum;
|
||||
var eth=null; // resolved via the wallet picker on connect
|
||||
var account=null, costs=null;
|
||||
|
||||
function log(msg,kind){var b=$('log');var d=document.createElement('div');d.className='dj-log '+(kind||'');d.innerHTML=msg;b.appendChild(d);b.scrollTop=b.scrollHeight;}
|
||||
@@ -81,8 +81,10 @@
|
||||
function showResult(big,sub,linkId){ var el=$('result'); if(!el) return; $('resultId').textContent=big; $('resultSub').textContent=sub; var lk=$('resultLink'); if(lk){ if(linkId){ lk.href='/my/'+linkId; lk.style.display='inline-flex'; } else lk.style.display='none'; } el.style.display='block'; try{el.scrollIntoView({behavior:'smooth',block:'center'});}catch(e){} }
|
||||
|
||||
async function connect(){
|
||||
if(!eth){ log('No wallet detected. Open this page in a browser with MetaMask (extension or the MetaMask in-app browser).','err'); return; }
|
||||
try{
|
||||
eth=await window.RMCWallet.pick();
|
||||
if(!eth){ log('No wallet selected or detected. Install/unlock MetaMask, Trust, or SafePal and try again.','err'); return; }
|
||||
attachWalletEvents();
|
||||
log('Requesting wallet connection…');
|
||||
var accs=await req('eth_requestAccounts'); account=accs[0];
|
||||
await ensurePolygon();
|
||||
@@ -152,17 +154,17 @@
|
||||
$('connectBtn').addEventListener('click',connect);
|
||||
$('registerBtn').addEventListener('click',doRegister);
|
||||
var ub=$('upgradeBtn'); if(ub) ub.addEventListener('click',doUpgrade);
|
||||
// Update in place on wallet events — do NOT location.reload() here: some wallets
|
||||
// (Trust Wallet in Brave) fire chainChanged on load, and reloading re-arms the
|
||||
// handler → infinite refresh loop that blocks the Connect button.
|
||||
if(eth && eth.on){
|
||||
eth.on('accountsChanged',function(accs){
|
||||
account=(accs&&accs[0])||null;
|
||||
if(!account){ $('connected').style.display='none'; $('connectBtn').style.display=''; log('Wallet disconnected.','err'); }
|
||||
else { $('wallet').textContent=account.slice(0,6)+'…'+account.slice(-4); refreshBalance(); }
|
||||
});
|
||||
eth.on('chainChanged',function(){ if(account) refreshBalance(); });
|
||||
}
|
||||
if(!eth) log('No wallet detected in this browser. Use MetaMask or Trust Wallet (extension, or the wallet app’s in-app browser).','err');
|
||||
});
|
||||
// Update in place on wallet events — do NOT location.reload() here: some wallets
|
||||
// (Trust Wallet in Brave) fire chainChanged on load, and reloading re-arms the
|
||||
// handler → infinite refresh loop. Bound once, after the picker resolves the provider.
|
||||
function attachWalletEvents(){
|
||||
if(!eth||!eth.on||eth.__rmcBound) return; eth.__rmcBound=true;
|
||||
eth.on('accountsChanged',function(accs){
|
||||
account=(accs&&accs[0])||null;
|
||||
if(!account){ $('connected').style.display='none'; $('connectBtn').style.display=''; log('Wallet disconnected.','err'); }
|
||||
else { $('wallet').textContent=account.slice(0,6)+'…'+account.slice(-4); refreshBalance(); }
|
||||
});
|
||||
eth.on('chainChanged',function(){ if(account) refreshBalance(); });
|
||||
}
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user