An SDK to develop applications on the Verified Network
npm install @verified-network/verified-sdknpm install @verified-network/verified-sdk
const {VerifiedWallet} = require('@verified-network/verified-sdk');
let mnemonics = await VerifiedWallet.generateMnemonics()
let wallet = await VerifiedWallet.importWallet(menmonics)
`
Using existing wallet
1. Using existing Wallet mnemonics
`
const {VerifiedWallet} = require('@verified-network/verified-sdk');
const mnemonics = 'input your wallet mnemonics'
let wallet = await VerifiedWallet.importWallet(menmonics)
`
2. Using existing wallet private key
`
const {VerifiedWallet} = require('@verified-network/verified-sdk');
const privateKey = 'input your wallet private key'
const provider = 'ethers.js provider' //Check provider subtopic below to learn more
let wallet = new VerifiedWallet(privatekey, provider)
`
setProvider
Provider can be set for wallet using 2 options:
using default providers
Default providers are available for networks like: mainnet/homestead, ropsten, sepolia e.t.c and are mainly used for development(it is also robust enough for use in production)
`
const {Provider} = require('@verified-network/verified-sdk');
const defaultProvider = 'sepolia' // or any other default provider network of your choice.
Network/chain id(number) can be used in place of network name, for example:
const defaultProvider = 11155111 // where number 11155111 is chain id for sepolia, any other chain id of default provider network can be used.
let walletWithProvider = wallet.setProvider(
Provider.defaultProvider(defaultProvider)
)
`
using custom providers
Verified Sdk supports Infura and Alchemy to provide custom providers for any network.
`
const {Provider} = require('@verified-network/verified-sdk');
const network = 'sepolia' // or any other network of your choice.
Network/chain id(number) can be used in place of network name, for example:
const network = 11155111 // where number 11155111 is chain id for sepolia, any other chain id can be used.
//For infura; to get api key and enable networks checout: https://www.infura.io/
const INFURA_API_KEY = 'your infura api key'
let walletWithProvider = wallet.setProvider(
Provider.infuraProvider(network, INFURA_API_KEY)
)
//For Alchemy; to get api key and enable networks checout: https://www.alchemy.com/
const ALCHEMY_KEY = 'your alchemy api key'
let walletWithProvider = wallet.setProvider(
Provider.alchemyProvider(network, ALCHEMY_KEY)
)
`
interacting with Smart contracts
`
cosnt {Client} = require('@verified-network/verified-sdk');
let clientContract = new Client(walletWithProvider);
`
This will create an instance of Client contract and you can access all the functions within the clientContract using this object.
Now you can call a function in clientContract like:
clientContract.setAccess("true") // to set the access to True/False.
Some contracts requires additional parameters to create their instances, for example:
`
cosnt {SecurityContract, PrimaryIssueManager} = require('@verified-network/verified-sdk');
// securityContract
const securityContractAddress = 'security address for any verified security'
let securityContract = new SecurityContract(walletWithProvider, securityContractAddress);
//primaryIssueManager
const primaryIssueManagerAddress = 'primary issue manager address'
const primaryIssueManagerplatform = 'primary issue manager platform' //e.g 'balancer'
let primaryIssueManagerContract = new PrimaryIssueManager(walletWithProvider, primaryIssueManagerAddress, primaryIssueManagerplatform);
`
Similarly you can create different Contracts instances available:
`
Client,
BondContract,
CashContract,
TokenContract,
FactoryContract,
RatesContract,
SecurityContract,
SecuritiesFactory,
PoolContract,
PrimaryIssueManager,
SecondaryIssueManager,
MarginIssueManager,
CustodyContract,
LiquidityContract,
DistributionContract
`
VerifiedContract
src/contract/index.ts is the base class for all Contracts created.
It has the logic to validate the Input, Sanitise the Input and Output, call the contract functions etc.
All the contracts trigger smart contract calls and go through the callContract function.
Optionally, all the contractCalls take in an additional parameter:
options?: { gasPrice?: number, gasLimit?: number, paymentToken?: string }
You can configure the gasPrice and gasLimit using this parameter as the last parameter to the contractCall function.
Example: this.callContract(FUNCTIONS.GETORDERS, originator, options)
Where, options = {gasPrice: XXX, gasLimit: YYY}
This is how you can integrate with any Dapp.
1. Install and Import the SDK
2. Create a wallet instance and fund it
3. Create instances of the Contract that you want to interact with using the above wallet and call their functions.
Common Error(s) with Verified Sdk integration with Dapp
Due to webpack version > 5 that no longer includes NodeJS polyfills by default, it is causing issues for developers that use React(create-react-app), React-native, Vite with webpack version > 5 to build applications with web3.js, ethers.js, alchemy libraries e.t.c. Many of this libraries and dependencies are used by Verified Sdk.
There are various ways to solve this error, from updating webpack config to babel config e.t.c. and can be overwhelming for developers. Verified Network Team recommend ed using best solutions that are easy to use and beginner friendly.
How to resolve React error(s) with Verified Sdk integration
Step 1: Install react-app-rewired
with npm: npm install --save-dev react-app-rewired
with yarn: yarn add --dev react-app-rewired
Step 2: Install needed dependencies
// with npm:
npm install --save-dev crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process
// with yarn:
yarn add crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process
note: the above dependencies are needed dependencies to make verified sdk works, more dependencies can be added to handle any other nodeJs polyfills error.
Step 3: Override create-react-app webpack config file
In the root folder of your project, create a new file called 'config-overrides.js', and add the following code to it:
`
const webpack = require("webpack");
module.exports = function override(config) {
const fallback = config.resolve.fallback || {};
Object.assign(fallback, {
crypto: require.resolve("crypto-browserify"),
stream: require.resolve("stream-browserify"),
assert: require.resolve("assert"),
http: require.resolve("stream-http"),
https: require.resolve("https-browserify"),
os: require.resolve("os-browserify"),
url: require.resolve("url"),
path: require.resolve("path-browserify"),
fs: false, //assumed fs module will not be used(to use fs module download dependency to handle it)
});
config.plugins = (config.plugins || []).concat([
new webpack.ProvidePlugin({
process: "process/browser",
Buffer: ["buffer", "Buffer"],
}),
]);
config.module.rules = [
...config.module.rules,
{
test: /\.m?js/,
resolve: {
fullySpecified: false,
},
},
]; // rules are optional can be customised to fit your usecase
config.resolve.fallback = fallback;
config.ignoreWarnings = [/Failed to parse source map/]; // optional can be customised to fit your usecase
return config;
};
`
This 'config-overrides.js' code snippet is telling webpack how to resolve the missing dependencies that are needed to support web3, ethers libraries and wallet providers in the browser/server side.
Step 4: Override package.json to use react-app-rewired
Within the package.json file, replace react-scripts with react-app-rewired scripts for 'start', 'build', 'test'
`
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject"
},
`
note: start changed from "react-scripts start" to "react-app-rewired start", build from "react-scripts build" to "react-app-rewired build" and test from "react-scripts test" to "react-app-rewired test" while eject remains the same.
The polyfill node core module error should be fixed any missing NodeJS polyfills should be included in your app, and your app should work well with Verified Sdk
How to resolve Vite error(s) with Verified Sdk integration
Step 1: install @esbuild-plugins/node-modules-polyfill and rollup-plugin-polyfill-node
with npm: npm i @esbuild-plugins/node-modules-polyfill rollup-plugin-polyfill-node
with yarn: yarn add @esbuild-plugins/node-modules-polyfill rollup-plugin-polyfill-node
Step 2: Install needed dependencies
with npm:
npm install --save-dev crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process
with yarn:
yarn add crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process
Step 3: update vite.config.js file
From the root folder of your project update 'vite.config.js' to resolve missing dependencies
`
import { NodeGlobalsPolyfillPlugin } from "@esbuild-plugins/node-globals-polyfill";
import nodePolyfills from "rollup-plugin-polyfill-node";
// https://vitejs.dev/config/
export default defineConfig({
build: {
target: ["es2020"], //optional can be customised
rollupOptions: {
plugins: [nodePolyfills()],
},
},
resolve: {
alias: {
process: "process/browser",
stream: "stream-browserify",
zlib: "browserify-zlib",
util: "util/",
path: "path-browserify",
"@": resolve(__dirname, "./src"), //optional
},
},
optimizeDeps: {
esbuildOptions: {
// Node.js global to browser globalThis
define: {
global: "globalThis",
},
supported: {
bigint: true, //optional
},
// Enable esbuild polyfill plugins
plugins: [
NodeGlobalsPolyfillPlugin({
buffer: true,
protocolImports: true,
}),
],
},
}
});
``