Pkey
Other than ZilPay, dApp developers can allow their users to interact with their dApp using other wallet choices such as a private key or keystore file. However, we do recommend to use browser add-on such as ZilPay for key management.
Import via Private Key
The following code snippet illustrates on how To import your account from a private key
zilliqa.wallet.addByPrivateKey(privkey); //Private key was stored in the privKey variable
Import via Keystore File
The following code snippet illustrates how to import your account from an encrypted JSON keystore file and retrieve the private from the encrypted
async function privKeyFromKeystore() {
let keystore = JSON.parse(encryptedWallet); //encryptedWallet is the encrypted keystore file
let privKey = await decryptPrivateKey(passphrase, keystore); //passphrase variable has the passphrase of the encrypted wallet
}
Interacting with dApp
After importing the account using zilliqa-js/crypto
module, the subsequent steps for doing anything are similar to the previous example.
In the code snippet below, we call the setHello()
transition of the Hello World
Contract using a private key.
Info
If you wish to use keystore instead of a private key, you can replace the zilliqa.wallet.addByPrivateKey(privkey)
with the code snippet above.
async updateWelcomeMsg(){
//Only the below two lines are different when compared with ZilPay login.
let zilliqa = new Zilliqa([https://dev-api.zilliqa.com](https://dev-api.zilliqa.com));
zilliqa.wallet.addByPrivateKey(privkey); //Private key was stored in the privKey variable
let setHelloValue = this.state.setHelloValue; //new value of the welcome msg
let contractAddress = localStorage.getItem("contract_address");
const CHAIN_ID = 333;
const MSG_VERSION = 1;
const VERSION = bytes.pack(CHAIN_ID, MSG_VERSION);
const myGasPrice = units.toQa('1000', units.Units.Li); // Gas Price that will be used by all transactions
contractAddress = contractAddress.substring(2);
const ftAddr = toBech32Address(contractAddress);
try {
const contract = zilliqa.contracts.at(ftAddr);
const callTx = await contract.call(
'setHello',
[
{
vname: 'msg',
type: 'String',
value: setHelloValue
}
],
{
// amount, gasPrice and gasLimit must be explicitly provided
version: VERSION,
amount: new BN(0),
gasPrice: myGasPrice,
gasLimit: Long.fromNumber(10000),
}
);
} catch (err) {
console.log(err);
}
}