import { contracts } from '@nymproject/contract-clients'; import { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'; import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing'; import { GasPrice } from '@cosmjs/stargate'; import { settings } from '../../client'; export const signerAccount = async (mnemonic: string) => { // create a wallet to sign transactions with the mnemonic const signer = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: 'n', }); return signer; }; export const fetchSignerCosmosWasmClient = async (mnemonic: string) => { const signer = await signerAccount(mnemonic); // create a signing client we don't need to set the gas price conversion for queries const cosmWasmClient = await SigningCosmWasmClient.connectWithSigner(settings.url, signer, { gasPrice: GasPrice.fromString('0.025unym'), }); return cosmWasmClient; }; export const fetchSignerClient = async (mnemonic: string) => { const signer = await signerAccount(mnemonic); // create a signing client we don't need to set the gas price conversion for queries // if you want to connect without signer you'd write ".connect" and "url" as param const cosmWasmClient = await SigningCosmWasmClient.connectWithSigner(settings.url, signer, { gasPrice: GasPrice.fromString('0.025unym'), }); /** create a mixnet contract client * @param cosmWasmClient the client to use for signing and querying * @param settings.address the bech32 address prefix (human readable part) * @param settings.mixnetContractAddress the bech32 address prefix (human readable part) * @returns the client in MixnetClient form */ const mixnetClient = new contracts.Mixnet.MixnetClient( cosmWasmClient, settings.address, // sender (that account of the signer) settings.mixnetContractAddress, // contract address (different on mainnet, QA, etc) ); return mixnetClient; };