forked from DAVFoundation/dav-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContracts.js.map
1 lines (1 loc) · 15.7 KB
/
Contracts.js.map
1
{"version":3,"sources":["../src/Contracts.ts"],"names":[],"mappings":"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","file":"Contracts.js","sourcesContent":["import IConfig from './IConfig';\nimport { DavID, BigInteger, ID, ContractsArtifacts } from './common-types';\nimport Web3 = require('web3');\nimport { ContractTypes } from './common-enums';\nimport Contract from 'web3/eth/contract';\nimport { EventLog, TransactionReceipt } from 'web3/types';\nimport { Observable } from 'rxjs';\nimport IPrice from './IPrice';\nimport sdkLogger from './sdkLogger';\n\nlet contracts: ContractsArtifacts = {\n Identity: require('./contracts/Identity'),\n DAVToken: require('./contracts/DAVToken'),\n BasicMission: require('./contracts/BasicMission'),\n};\n\nconst REGISTRATION_REQUEST_HASH = new Web3().utils.sha3(\n 'DAV Identity Registration',\n);\nconst TOKEN_AMOUNT = '1500000000000000000'; // TODO: TOKEN_AMOUNT need to be set by basicMission contract.\n\ninterface IContract {\n contract: Contract;\n contractAddress: string;\n abi: any[];\n}\n\nexport default class Contracts {\n private static initWeb3(config: IConfig): Web3 {\n return new Web3(new Web3.providers.HttpProvider(config.ethNodeUrl));\n }\n\n private static getContract(\n contractType: ContractTypes,\n web3: Web3,\n config: IConfig,\n ): IContract {\n if (config.contracts) {\n contracts = config.contracts;\n }\n const abi = contracts[contractType].abi;\n const contractAddress =\n contracts[contractType].networks[config.blockchainType].address;\n const contract = new web3.eth.Contract(abi, contractAddress);\n return { abi, contractAddress, contract };\n }\n\n private static sendSignedTransaction(\n web3: Web3,\n rawTransaction: string,\n ): Promise<TransactionReceipt> {\n return new Promise((resolve, reject) => {\n const transaction = web3.eth.sendSignedTransaction(rawTransaction);\n transaction.once('receipt', receipt => {\n sdkLogger(`Web3 transaction succeeded: ${JSON.stringify(receipt)}`);\n resolve(receipt);\n });\n transaction.once('transactionHash', hash => {\n sdkLogger(`Web3 transaction sent: ${hash}`);\n });\n transaction.on('error', err => {\n sdkLogger(`Web3 transaction failed: ${JSON.stringify(err)}`);\n reject(err);\n });\n });\n }\n\n private static async checkContractPastEvents(\n contract: Contract /* , filterParam: string */,\n ): Promise<EventLog[]> {\n // TODO: Filter getPastEvents by sellerId or by missionId.\n const event = await contract.getPastEvents('allEvents');\n return event;\n }\n\n private static toSafeGasLimit(gasAmount: number) {\n return Math.min(gasAmount + 100, 4000000);\n }\n\n private static calculatePrice(price: IPrice[]) {\n return '150000000000000000';\n }\n\n public static generateMissionId(config: IConfig): string {\n const web3 = Contracts.initWeb3(config);\n const { address } = web3.eth.accounts.create();\n return address;\n }\n\n public static async isIdentityRegistered(\n davId: DavID,\n config: IConfig,\n ): Promise<boolean> {\n const web3 = Contracts.initWeb3(config);\n const { contract } = Contracts.getContract(\n ContractTypes.identity,\n web3,\n config,\n );\n const receipt = await contract.methods.isRegistered(davId).call();\n return receipt;\n }\n\n public static async registerIdentity(\n davId: DavID,\n identityPrivateKey: string,\n walletAddress: string,\n walletPrivateKey: string,\n config: IConfig,\n ): Promise<string> {\n const isAlreadyRegistered = await Contracts.isIdentityRegistered(\n davId,\n config,\n );\n if (isAlreadyRegistered) {\n return 'ALREADY_REGISTERED';\n }\n const web3 = Contracts.initWeb3(config);\n const { contract, contractAddress } = Contracts.getContract(\n ContractTypes.identity,\n web3,\n config,\n );\n const { sign } = web3.eth.accounts.privateKeyToAccount(identityPrivateKey);\n const { v, r, s } = sign(REGISTRATION_REQUEST_HASH);\n const { encodeABI, estimateGas } = await contract.methods.register(\n davId,\n v,\n r,\n s,\n );\n const tx = {\n data: encodeABI(),\n to: contractAddress,\n from: walletAddress,\n gas: Contracts.toSafeGasLimit(await estimateGas({ from: walletAddress })),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const { rawTransaction } = await web3.eth.accounts.signTransaction(\n tx,\n walletPrivateKey,\n );\n const transactionReceipt = await Contracts.sendSignedTransaction(\n web3,\n rawTransaction,\n );\n return transactionReceipt.transactionHash;\n }\n\n public static async approveMission(\n davId: DavID,\n walletPrivateKey: string,\n config: IConfig,\n ): Promise<TransactionReceipt> {\n const web3 = Contracts.initWeb3(config);\n const { contract, contractAddress } = Contracts.getContract(\n ContractTypes.davToken,\n web3,\n config,\n );\n const missionContract = Contracts.getContract(\n ContractTypes.basicMission,\n web3,\n config,\n );\n const { encodeABI, estimateGas } = await contract.methods.approve(\n missionContract.contractAddress,\n TOKEN_AMOUNT,\n );\n const tx = {\n data: encodeABI(),\n to: contractAddress,\n from: davId,\n gas: Contracts.toSafeGasLimit(\n await estimateGas({ from: davId, to: contractAddress }),\n ),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const { rawTransaction } = await web3.eth.accounts.signTransaction(\n tx,\n walletPrivateKey,\n );\n const transactionReceipt = await Contracts.sendSignedTransaction(\n web3,\n rawTransaction,\n );\n return transactionReceipt;\n }\n\n public static async startMission(\n missionId: ID,\n davId: DavID,\n walletPrivateKey: string,\n vehicleId: DavID,\n price: IPrice[],\n config: IConfig,\n ): Promise<TransactionReceipt> {\n const fullPrice = Contracts.calculatePrice(price);\n const web3 = Contracts.initWeb3(config);\n const { contract, contractAddress } = Contracts.getContract(\n ContractTypes.basicMission,\n web3,\n config,\n );\n const { encodeABI, estimateGas } = await contract.methods.create(\n missionId,\n vehicleId,\n davId,\n TOKEN_AMOUNT,\n );\n const tx = {\n data: encodeABI(),\n to: contractAddress,\n from: davId,\n gas: Contracts.toSafeGasLimit(\n await estimateGas({\n from: davId,\n to: contractAddress,\n value: fullPrice,\n }),\n ),\n value: fullPrice,\n gasPrice: await web3.eth.getGasPrice(),\n };\n const { rawTransaction } = await web3.eth.accounts.signTransaction(\n tx,\n walletPrivateKey,\n );\n const transactionReceipt = await Contracts.sendSignedTransaction(\n web3,\n rawTransaction,\n );\n return transactionReceipt;\n }\n\n public static async finalizeMission(\n missionId: ID,\n davId: DavID,\n walletPrivateKey: string,\n config: IConfig,\n ): Promise<TransactionReceipt> {\n const web3 = Contracts.initWeb3(config);\n const { contract, contractAddress } = Contracts.getContract(\n ContractTypes.basicMission,\n web3,\n config,\n );\n const { encodeABI, estimateGas } = await contract.methods.fulfilled(\n missionId,\n );\n const tx = {\n data: encodeABI(),\n to: contractAddress,\n from: davId,\n gas: Contracts.toSafeGasLimit(await estimateGas({ from: davId })),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const { rawTransaction } = await web3.eth.accounts.signTransaction(\n tx,\n walletPrivateKey,\n );\n const transactionReceipt = await Contracts.sendSignedTransaction(\n web3,\n rawTransaction,\n );\n return transactionReceipt;\n }\n\n public static watchContract(\n davId: string,\n contractType: ContractTypes,\n config: IConfig,\n ): Observable<EventLog> {\n const web3 = Contracts.initWeb3(config);\n const { contract } = Contracts.getContract(contractType, web3, config);\n let lastBlock = 0;\n let lastTransactionIndex = 0;\n const events = Observable.interval(2000)\n .map(() => Contracts.checkContractPastEvents(contract /* , davId */))\n .map(promise => Observable.fromPromise(promise))\n .map(eventsObservable => eventsObservable.mergeAll())\n .map(eventsArray => Observable.from(eventsArray))\n .mergeAll()\n .filter(\n event =>\n event.blockNumber > lastBlock ||\n (event.blockNumber === lastBlock &&\n event.transactionIndex > lastTransactionIndex),\n )\n .do(event => {\n lastBlock = event.blockNumber;\n lastTransactionIndex = event.transactionIndex;\n });\n return events;\n }\n}\n"]}