Portis
Portis is a web-based wallet built keeping easy user-onboarding in mind. It comes with a JavaScript SDK that integrates into the dApp and creates a local wallet-less experience for the user. Further, it handles setting up the wallet, transactions, and gas fees.
Like Metamask, it is non-custodial - users control their keys, Portis just stores them securely. But, unlike Metamask, it is integrated into the application and not the browser. Users have their keys associated with their login ID and passwords.
Type: Non-custodial/HD
Private Key Storage: Encrypted and stored on Portis servers
Communication to Ethereum Ledger: Defined by the developer
Private key encoding: Mnemonic
Set up Web3
Install Portis in your dApp:
npm install --save @portis/web3
Now, register your dApp with Portis to obtain a dApp ID using the Portis Dashboard.
Import portis
and web3
objects:
import Portis from '@portis/web3';
import Web3 from 'web3';
Portis constructor takes the first argument as the dApp ID and the second argument as the network you would like to connect with. This can either be a string or an object.
const portis = new Portis('YOUR_DAPP_ID', 'maticTestnet');
const web3 = new Web3(portis.provider);
Set up Account
If the installation and instantiation of Web3 was successful, the following should successfully return the connected account:
this.web3.eth.getAccounts()
.then((accounts) => {
this.account = accounts[0];
})
Instantiating Contracts
This is how we should instantiate contracts:
const myContractInstance = new this.web3.eth.Contract(myContractAbi, myContractAddress)
Calling Functions
Calling call()
Function
this.myContractInstance.methods.myMethod(myParams)
.call()
.then (
// do stuff with returned values
)
Calling send()
Function
this.myContractInstance.methods.myMethod(myParams)
.send({
from: this.account,gasPrice: 0
})
.then ((receipt) => {
// returns a transaction receipt
})