@identity.com/gateway-evm-ts-client
v0.1.4
Published
Adapter library for Identity.com gateway token system on Ethereum
Downloads
27
Maintainers
Keywords
Readme
gateway-eth-ts
Gateway ETH TS library
This client library allows JS/TS applications to communicate with Gateway token system on Ethereum blockchain. Common methods include validation of existing tokens, new gateway token issuance, token freezing/unfreezing and revocation.
Installation
yarn add @identity.com/gateway-evm-ts-client
Metamask integration example
import {
GatewayTs,
} from "@identity.com/gateway-evm-ts-client";
import {
getDefaultProvider,
Wallet,
providers
} = from 'ethers';
import { useWallet } from 'use-wallet';
(async function() {
const { ethereum } = useWallet();
const chainId = Number(ethereum.chainId);
const provider = new ethers.providers.Web3Provider(
ethereum,
chainId
);
const signer = provider.getSigner();
const network = await provider.getNetwork();
const gateway = new GatewayTs(gatekeeper, network, DEFAULT_GATEWAY_TOKEN_ADDRESS);
const testUser = '0xD42Ef952F2EA1E77a8b771884f15Bf20e35cF85f';
await (await gateway.issue(testUser)).wait();
})();
Utility functions
Token bitmask construction
The easiest way to associate certain flags with the gateway token is by using list of supported KYC flags, and addFlagsToBitmask
function.
flags = [KYCFlags.IDCOM_1];
bitmask = addFlagsToBitmask(bitmask, flags);
Examples
Charges
Charging in Eth:
// when charging in ETH - the gatekeeper cannot send the transaction directly
// Use GatewayTsTransaction to generate a transaction that can be sent to the client
const gateway = new GatewayTsTransaction(
gatekeeper,
DEFAULT_GATEWAY_TOKEN_ADDRESS
);
const charge = makeWeiCharge(chargeValue, recipientAddress);
const tx = gateway.issue(wallet, gatekeeperNetwork, undefined, undefined, charge)
// send tx to the user to sign and send
Charging in ERC20:
const charge = makeERC20Charge(
chargeValue,
erc20TokenAddress,
userAddress,
recipientAddress
);
const approvalTx = await approveERC20Charge(
charge,
provider
);
const internalApproveTx = await approveInternalERC20Charge(
charge,
gatekeeperNetwork,
provider
);
// send approvalTx and approveInternalTx to the user to sign
// once the user has signed the above transactions
const gateway = new GatewayTs(
gatekeeper,
DEFAULT_GATEWAY_TOKEN_ADDRESS
);
await gateway.issue(wallet, gatekeeperNetwork, undefined, undefined, charge)
);
Running Test Suite
We currently use a local node (either foundry or hardhat) with a fork from the bsc testnet contract deployments for our test. To run the test suite locally you must specify the $RPC_URL
enviornment variable to a bsc testnet node.