Deploy a Token

Deploy using JSON configuration

To deploy a Token, you first need to build its JSON configuration..

Then, execute the #createFactory() static method of the Token class using a signer to generate a plan to deploy a Token according to its configuration. The process will emit several progress events that you can subscribe to follow the deployment of the contracts and configuration steps. The method returns a deployment factory that will itself resolve to a Token object via its .deploy method.

const tokenFactory = await Token.createFactory({ /* Configuration */ })

tokenFactory.on('fail', (event) => { console.log(event); });
tokenFactory.on('progress', (event) => { console.log(event); });
tokenFactory.on('deployed', (event) => { console.log(event); });

await tokenFactory.makePlan();

console.log(tokenFactory.plan); // Describes the steps required to deploy the token.

const token = await tokenFactory.deploy({ signer });

const tx = await token.registerIdentity();
await tx.wait();

Deploying contracts individually

const token = new Token();
token.provider = "YOUR PROVIDER"; // Set your provider (e.g., Homestead, Ropsten, etc.)
token.signer = "YOUR SIGNER"; // Set your signer, the wallet used to sign transactions

    await token.deployClaimTopicsRegistry();

    await token.deployTrustedIssuersRegistry();

// ClaimTopics and TrustedIssuers are required to Deploy Identity Registry
    await token.deployIdentityRegistry();

    await token.deployCompliance();

// Identity Registry and Compliance are required to Deploy Token
    await token.deployToken();

Once deployed, you can get smart contracts addresses by using:

    const tokenAddress = token.getTokenAddress();
    const identityAddress = token.getIdentityRegistryAddress();
    const complianceAddress = token.getComplianceAddress();
    const claimTopicsAddress = token.getClaimTopicsRegistryAddress();
    const trustedIssuers = token.getTrustedIssuersRegistryAddress();

Redeploy Token only

If you need to redeploy Token (e.g., in case you need to re-issue a Token without redeploying all the smart contracts), and an IdentityRegistry and / or Compliance already exists, you can deploy Token by loading both contracts.

    const token = new Token();

    await token.loadIdentityRegistry(
            "IDENTITY REGISTRY ADDRESS"
          );
    await token.loadCompliance("COMPLIANCE ADDRESS");
    await token.deployToken();