You may want to wrap the Web3Shards RPC endpoints in a web3 provider. Here's how you would do it:
NodeJS (EVM)
'use strict';
const HttpProvider = require("web3-providers-http");
const Web3 = require('web3');
class RPCClient {
constructor() {
}
onChain(_chain) {
this._provider = new HttpProvider(`https://api.web3shards.io/v1/rpc/${_chain}`, {
keepAlive: true,
timeout: 20000,
headers: [
{
name: 'x-api-key',
value: "YOUR_SHARDS_API_KEY"
}
],
});
this._web3 = new Web3(this._provider);
return this;
}
isAddress(_address) {
return this._web3.utils.isAddress(_address);
}
async getTransactionReceipt(_tx) {
return await this._web3.eth.getTransactionReceipt(_tx);
}
async getTransaction(_tx, _options=null) {
return await this._web3.eth.getTransaction(_tx);
}
}
module.exports = {
Web3ShardsRPCClient: {
eth: new RPCClient().onChain('eth'),
bsc: new RPCClient().onChain('bsc'),
base: new RPCClient().onChain('base'),
polygon: new RPCClient().onChain('polygon'),
shibarium: new RPCClient().onChain('shibarium'),
}
}
NodeJS (Solana)
'use strict';
const { Connection } = require("@solana/web3.js");
class SolanaRPCClient {
constructor() {
this._solana = new Connection("https://api.web3shards.io/v1/rpc/solana"), {
commitment: "confirmed",
httpHeaders: [
{
name: 'x-api-key',
value: "YOUR_SHARDS_API_KEY"
}
]
});
}
async getTransaction(_txId, _options=null) {
return this._solana.getTransaction(_txId, _options);
}
}
module.exports = SolanaRPCClient;