// core.js
'use strict';
const Transaction = require('./transaction');
var _okdk;
module.exports = function(okdk) {
return new Core(okdk);
};
/**
* Set up Core library and relevant modules.
* @constructor
*
* @param {Object} okdk - OKDK module instance.
*/
function Core(okdk) {
_okdk = okdk;
/* Set up transaction module. */
this._transaction = Transaction(okdk);
}
Core.prototype.init = async function() {
try {
const addressSynced = await this.syncAddresses();
} catch(error) {
console.log(error);
}
}
/**
* Sync addresses deployed contracts.
* @ignore
*
* @return {boolean} success - Sync succeeded.
*/
Core.prototype.syncAddresses = async function() {
try {
/* Load okdk-god abi */
this._okdkGodAbi = require('../contracts/OkeyDokeyGod.json').abi;
this._okdkGodAddress = '0x98f6621da7b5f3dddcd4bc74310e3f2410350f12';
let okdkGodContract = new _okdk.web3.eth.Contract(this._okdkGodAbi,
this._okdkGodAddress);
/* Set up OkeyDokey. */
const okdkAddress = await okdkGodContract.methods.getAddress().call();
this._okdkAddress = okdkAddress;
this._okdkAbi = require('../contracts/OkeyDokey.json').abi;
this.okdkContract = new _okdk.web3.eth.Contract(this._okdkAbi,
this._okdkAddress);
/* Set up main contract addresses. */
const getTokenAddress = this.okdkContract.methods.getAddress(0).call();
const getHousesAddress = this.okdkContract.methods.getAddress(1).call();
const getDevicesAddress = this.okdkContract.methods.getAddress(2).call();
const getReservationsAddress = this.okdkContract.methods.getAddress(3).call();
const getReviewsAddress = this.okdkContract.methods.getAddress(4).call();
const [tokenAddress, housesAddress, devicesAddress, reservationsAddress, reviewsAddress]
= await Promise.all([getTokenAddress, getHousesAddress, getDevicesAddress,
getReservationsAddress, getReviewsAddress]);
/* Construct contracts. */
this._tokenAddress = tokenAddress;
this._tokenAbi = require('../contracts/OkeyDokeyToken.json').abi;
this._housesAddress = housesAddress;
this._housesAbi = require('../contracts/Houses.json').abi;
this._devicesAddress = devicesAddress;
this._devicesAbi = require('../contracts/Devices.json').abi;
this._reservationsAddress = reservationsAddress;
this._reservationsAbi = require('../contracts/Reservations.json').abi;
this._reviewsAddress = reviewsAddress;
this._reviewsAbi = require('../contracts/Reviews.json').abi;
console.log('Address sync complete.');
} catch (error) {
console.log('Address sync falied.');
console.log(error);
}
};
/**
* Sync abis deployed contracts.
* @ignore
*
* @return {boolean} success - Sync succeeded.
*/
Core.prototype.syncAbi = function() {
// Stub for now.
return true;
};
/**
* Wrapper for Transaction's callContract method.
* @ignore
*
* @param {Object} user - User instance of caller.
* @param {string} contractAddress - Address of contract being called.
* @param {Object} callData - Abi encoded function call.
*/
Core.prototype.callContract = function(user, contractAddress, callData) {
return this._transaction.callContract(user, contractAddress, callData);
};
/**
* Wrapper for Transaction's approve method.
*
* @param {Object} user - User instance of sender.
* @param {string} spender - Address of spender.
* @param {int} value - Amount to add to allowance.
*/
// Core.prototype.approve = function(user, spender, value) {
// return this._transaction.approve(user, spender, value);
// };
/**
* Wrapper for Transaction's sendToken method.
*
* @param {Object} user - User instance of sender.
* @param {string} to - Address of receiver.
* @param {int} value - Amount to send.
*/
// Core.prototype.sendToken = function(user, to, value) {
// this._transaction.sendToken(user, to, value);
// };
/**
* Wrapper for OKDKgod's updateAddress method.
* @ignore
*
* @param {string} address - Address of okeydokey.
* @return {boolean} Address update succeeded.
*/
Core.prototype.setOkeyDokey = function(address) {
return true;
};