Welcome to MapNode Extension Wallet Developer Guide. This documentation contains guides for developers to get started developing on MapNode Extension Wallet.
To detect MapNode Extension with Klaytn
To detect whether your browser is running MapNode Extension, please use:
if(window.MapNode ||window.ethereum ||window.ethereum?.isMapNode ){console.log('MapNode Extension is installed!');}
Notice: MapNode Extension Testnet is under development and not available now. The MapNode Extension on Ethereum JavaScript provider API is specified by EIP-1193. Support window.ethereum only and removal window.web3
To connect MapNode Extension Wallet
To connect MapNode Extension means to access the user's [blockchain - like Ethereum] account(s).
// Connect & get accountswindow.ethereum.request({method:'eth_accounts'});// Alias for connectionwindow.ethereum.request({method:'eth_requestAccounts'});//Check if dapp connectedwindow.ethereum.isConnected();//Check if the caller's current permissionswindow.ethereum.request({method:'wallet_getPermissions'});//Check if request the given permissions window.ethereum.request({method:'wallet_requestPermissions'});
To disconnect MapNode Extension Wallet
To disconnect MapNode Extension, please use:
window.ethereum.disconnect()
To experience functions
Once your account is connected, let's start experiencing more functions.
Get Current Account
return Promise<Array[String]>
If wallet can not be found, return [] instead of throw Error
window.ethereum.request({ method:'eth_accounts' }).then(accounts => {if (accounts[0]) {// Do something with accounts } else {// Wallet not found }})
return Promise<string>- The public encryption key of the Ethereum account whose encryption key should be retrived
let encryptionPublicKeywindow.ethereum.request({ method:'eth_getEncryptionPublicKey', params: [accounts[0]],// you must have access to the specified account }).then((result) => { encryptionPublicKey = result; }).catch((error) => {if (error.code ===4001) {// EIP-1193 userRejectedRequest errorconsole.log("We can't encrypt anything without the key."); } else {console.error(error); } });
You can connect and receive multiChain address at the same time by using the following methods
asyncfunctionconnect(){if(!window.MapNode){thrownewError('MapNode Extension is required'); }constaccounts=awaitwindow.MapNode.connect([<chain 1>, <chain 2>, ...]); if(!accounts){thrownew Error('Connect Error | Usercancelyour request'); }// Do anything with accounts:[<address of chain 1>, <address of chain 2>]}
When your connection is success, chain's properties will be available for your next request. For example:
// For example | connect ether & solanaasyncfunctionconnect(){constconn=awaitwindow.MapNode.connect(['ether','solana']);// If user accept the request, those properties will available at window.MapNode ;// window.solana || Checkout document of solana connection guide for more methods;// window.ether || Checkout document of ether connection guide for more methods;}
Chain's Name can be found at
const { CHAIN_NAME } =window.MapNode
Subscription
Support subscribe using JSON-RPC notifications. This allows clients to wait for events instead of polling for them. All result will be release at data event.
Methods
// For Subscribewindow.ethereum.request({ method:'eth_subscribe', params: ['<type>','<options>']})// Its result will be subscription ID which can be used for unsubscribe// For Unsubscribewindow.ethereum.request({ method:'eth_unsubscribe', params: ['<Subscription ID>']});
Example
// Subscribe for eventconstsubscriptionID=window.ethereum.request({ method:'eth_subscribe', params: ["logs", { address:"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", topics: ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]})// You can listen for incoming notifications bywindow.ethereum.on("data", data => {// Do the rest of your work with data})
To handle events
List of events
Currently we only support some action event from wallet extension