import {injectable} from "tsyringe"; import {ProviderService} from "./ProviderService"; import {ReflauntWallet} from "../../models/ReflauntWallet"; import {HdWalletService} from "./HdWalletService"; import {ReflauntInstanceShim} from "../../models/ReflauntInstanceShim"; import {JsonUtil} from "../utils/JsonUtil"; const contract = require('@truffle/contract'); @injectable() export class ContractService { contractPath: string = './build/contracts/Reflaunt.json'; constructor(private providerService: ProviderService, private hdWalletService: HdWalletService) {} async loginAs(id: number): Promise { // use JsonUtil.parseData because require will cache the json content and will always fail the test const contractData = JsonUtil.parseData(this.contractPath); const truffleContract = contract(contractData); const wallet: ReflauntWallet = this.hdWalletService.getWallet(id); truffleContract.setProvider(this.providerService.getPrivateKeyProvider(wallet)); truffleContract.defaults({ from: wallet.address }); const instance: ReflauntInstanceShim = await truffleContract.deployed(); instance.wallet = wallet; instance.web3 = truffleContract.web3; return instance; } async getContract(): Promise { const contractData = JsonUtil.parseData(this.contractPath); const truffleContract = contract(contractData); truffleContract.setProvider(this.providerService.getPublicProvider()); truffleContract.defaults({ from: null }); const instance: ReflauntInstanceShim = await truffleContract.deployed(); instance.web3 = truffleContract.web3; return instance; } }