Example #1
0
export const deployContract = async (
  contract: any,
  wallet: ethers.Wallet,
  args?: any[]
): Promise<ethers.Contract> => {
  const contractFactory = new ethers.ContractFactory(
    contract.abi,
    contract.binary,
    wallet
  );
  return contractFactory.deploy(...(args || []));
};
Example #2
0
 beforeEach(async () => {
   const contractFactory = new ethers.ContractFactory(
     appInstance.abi,
     await appInstance.generateLinkedBytecode(networkID),
     unlockedAccount
   );
   stateChannel = await contractFactory.deploy(
     accounts[0],
     [A.address, B.address],
     ethers.constants.HashZero,
     ethers.constants.HashZero,
     10
   );
 });
Example #3
0
  /**
   * Deploy new instance of contract
   * @param wallet Wallet (with provider) to use for contract calls
   * @param args Optional arguments to pass to contract constructor
   * @returns New contract instance
   */
  public async deploy(wallet: ethers.Wallet, args?: any[]): Promise<Contract> {
    if (!wallet.provider) {
      throw new Error("Signer requires provider");
    }

    const networkId = (await wallet.provider.getNetwork()).chainId;
    const bytecode = (await this.links)
      ? await this.generateLinkedBytecode(networkId)
      : this.bytecode;
    const contractFactory = new ethers.ContractFactory(
      this.abi,
      bytecode,
      wallet
    );
    return contractFactory.deploy(...(args || []));
  }
Example #4
0
  beforeEach(async () => {
    const networkID = await AbstractContract.getNetworkID(unlockedAccount);
    const staticCall = AbstractContract.fromArtifactName("StaticCall");
    const signatures = AbstractContract.fromArtifactName("Signatures");
    const transfer = AbstractContract.fromArtifactName("Transfer");
    const appInstance = await AbstractContract.fromArtifactName("AppInstance", {
      Signatures: signatures,
      StaticCall: staticCall,
      Transfer: transfer
    });
    const countingApp = await AbstractContract.fromArtifactName("CountingApp", {
      StaticCall: staticCall
    });

    game = await countingApp.deploy(unlockedAccount);

    app = {
      addr: game.address,
      resolve: game.interface.functions.resolve.sighash,
      applyAction: game.interface.functions.applyAction.sighash,
      getTurnTaker: game.interface.functions.getTurnTaker.sighash,
      isStateTerminal: game.interface.functions.isStateTerminal.sighash
    };

    terms = {
      assetType: AssetType.ETH,
      limit: Utils.UNIT_ETH.mul(2),
      token: ethers.constants.AddressZero
    };

    const contractFactory = new ethers.ContractFactory(
      appInstance.abi,
      await appInstance.generateLinkedBytecode(networkID),
      unlockedAccount
    );

    stateChannel = await contractFactory.deploy(
      accounts[0],
      [A.address, B.address],
      keccak256(encode(appEncoding, app)),
      keccak256(encode(termsEncoding, terms)),
      10
    );
  });
  beforeEach(async () => {
    const paymentApp = await AbstractContract.fromArtifactName("PaymentApp");
    pc = await paymentApp.deploy(unlockedAccount);

    // Specifically for the AppInstance
    const appInstance = artifacts.require("AppInstance");
    const staticCall = artifacts.require("StaticCall");
    const signatures = artifacts.require("Signatures");
    const transfer = artifacts.require("Transfer");
    appInstance.link("Signatures", signatures.address);
    appInstance.link("StaticCall", staticCall.address);
    appInstance.link("Transfer", transfer.address);

    app = {
      addr: pc.address,
      resolve: pc.interface.functions.resolve.sighash,
      applyAction: "0x00000000",
      getTurnTaker: "0x00000000",
      isStateTerminal: "0x00000000"
    };

    terms = {
      assetType: AssetType.ETH,
      limit: Utils.UNIT_ETH.mul(2),
      token: ethers.constants.AddressZero
    };

    const contractFactory = new ethers.ContractFactory(
      appInstance.abi,
      appInstance.binary,
      unlockedAccount
    );

    testAppInstance = await contractFactory.deploy(
      accounts[0],
      [A.address, B.address],
      keccak256(encode(appEncoding, app)),
      keccak256(encode(termsEncoding, terms)),
      10
    );
  });