Skip to content

Commit

Permalink
api updated contracts and truffle artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcWilliam committed Aug 23, 2018
1 parent 931ae4b commit 8921833
Show file tree
Hide file tree
Showing 11 changed files with 33 additions and 271 deletions.
2 changes: 0 additions & 2 deletions api-js/src/Servers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@ const SERVERS = {
LOCALHOST: <ServerInfo>{
STATISTICS_API: 'http://localhost:8064/api/',
HTTP_PROVIDER: 'http://localhost:8545',
CONTRACTS_URL: 'http://localhost:3000',
IPFS_NODE: '/ip4/127.0.0.1/tcp/5001',
NETWORK_ID: 5777,
HD_PATH: "m/44'/60'/0'/0" // BIP44
},
RINKEBY: <ServerInfo>{
STATISTICS_API: null,
HTTP_PROVIDER: 'https://rinkeby.infura.io/39L4CW0Z7li9TKB58aTN',
CONTRACTS_URL: null,
IPFS_NODE: '/ip4/127.0.0.1/tcp/5001',
NETWORK_ID: 4,
HD_PATH: "m/44'/60'/0'/0" // BIP44
Expand Down
33 changes: 0 additions & 33 deletions api-js/src/contract-wraper/EncryptedFile.ts

This file was deleted.

22 changes: 5 additions & 17 deletions api-js/src/contract-wraper/contract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ export interface GenericCallArgs {

export abstract class Contract {

static ABI;
static ADDRESS;

protected _address: string;

public get address(): string { return this._address; }
Expand All @@ -16,19 +19,6 @@ export abstract class Contract {
this._address = <any>address;
}

/**
* @return {string} the contract name
*/
public abstract get contractName(): string

/**
* @return {TruffleContract} the contract
*/
public async getContract() {
var web3ServiceInstance = await (Web3Service.getInstance());
return web3ServiceInstance.getContract(this.contractName);
}

/**
* @return {TruffleContract Instance} the contract instance
*/
Expand Down Expand Up @@ -66,8 +56,7 @@ export abstract class Contract {
let extraParams = (args && args.extraParams) ? args.extraParams : {};

if (extraParams.from == null) {
let web3ServiceInstance = await (Web3Service.getInstance());
extraParams.from = await web3ServiceInstance.getAccount();
extraParams.from = await Web3Service.getAccount();
}

if (extraParams.gas == null) {
Expand All @@ -87,8 +76,7 @@ export abstract class Contract {
protected async genericEvent(eventName: string, extraParams?: { fromBlock?: any, toBlock?: any, filter?: { any } }): Promise<any[]> {
try {
var contractInstance = await this.getContractInstance();
var web3ServiceInstance = await (Web3Service.getInstance());
var account = await web3ServiceInstance.getAccount();
var account = await Web3Service.getAccount();

extraParams = extraParams || {};
extraParams.fromBlock = extraParams.fromBlock || 0;
Expand Down
13 changes: 3 additions & 10 deletions api-js/src/helpers/config.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
import { ServerInfo } from '../Servers';

export default class Config {

public static IsProduction: boolean = false;
public static DevMnemonic: string = "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat";

public static server: ServerInfo;

public static TruffleContract;
public static LightWallet;

export default class CONFIG {

public static SERVER: ServerInfo;
public static passwordGetter: Function;
public static passwordSetter: Function;

Expand Down
40 changes: 4 additions & 36 deletions api-js/src/helpers/contract-artifact.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,14 @@
import request = require('request');
import Config from './config';

//let CONTRACT_NAME = require("medx.sol/build/contracts/{CONTRACT_NAME}.json");
let EncryptedFile = require("medx.sol/build/contracts/EncryptedFile.json");
let Keystore = require("medx.sol/build/contracts/Keystore.json");
let KeystoreFactory = require("medx.sol/build/contracts/KeystoreFactory.json");
let Record = require("medx.sol/build/contracts/Record.json");
let RecordFactory = require("medx.sol/build/contracts/RecordFactory.json");

export class ContractArtifact {

private static Jsons = {
//CONTRACT_NAME: CONTRACT_NAME,
EncryptedFile: EncryptedFile,
Keystore: Keystore,
KeystoreFactory: KeystoreFactory,
Record: Record,
RecordFactory: RecordFactory,
}

/**
*
* @param contractName the contract name
*/
public static async get(contractName: string): Promise<any> {
return new Promise((resolve, reject) => {

var fromLocal = () => {
this.Jsons[contractName] ? resolve(ContractArtifact.Jsons[contractName]) : reject("the contract name does not exists");
}

var fromServer = () => {
request(
`${Config.server.CONTRACTS_URL}/${contractName}.json`,
{ json: true },
(err, res, body) => {
err ? fromLocal() : resolve(body)
}
);
}

return Config.server.CONTRACTS_URL ? fromServer() : fromLocal();
});
}
public static Keystore = Keystore;
public static KeystoreFactory = KeystoreFactory;
public static Record = Record;
public static RecordFactory = RecordFactory;
}
4 changes: 2 additions & 2 deletions api-js/src/helpers/ipfs-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { EcnriptionHandler } from './encription-handler';

import IPFS = require('ipfs');
import fs = require('fs'); //Js File library
import Config from './config';
import CONFIG from './config';

export class IPFSservice {

Expand All @@ -20,7 +20,7 @@ export class IPFSservice {

config: {
Addresses: {
API: Config.server.IPFS_NODE,
API: CONFIG.SERVER.IPFS_NODE,

}
}
Expand Down
4 changes: 2 additions & 2 deletions api-js/src/helpers/statistics-handler.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import request = require('request');
import Config from './config';
import CONFIG from './config';

export class StatisticsHandler {

public static async PostRecord(rec: { any }): Promise<any> {
return new Promise((resolve, reject) => {
request({
url: `${Config.server.STATISTICS_API}record`,
url: `${CONFIG.SERVER.STATISTICS_API}record`,
method: 'POST',
json: true,
body: rec
Expand Down
5 changes: 3 additions & 2 deletions api-js/src/helpers/utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
/* Auto generated password length */
export const generatedPasswordLength = 12;
/*

/**
* "Secure" password generator
* from: https://github.com/PaulLaux/eth-hot-wallet/blob/master/app/utils/crypto.js
*/
*/
export function generateString(len) {
const MAXLEN = len; /* tweak this */
const MINLEN = len;
Expand Down
150 changes: 4 additions & 146 deletions api-js/src/helpers/web3-service.ts
Original file line number Diff line number Diff line change
@@ -1,160 +1,18 @@
let Web3 = require('web3');

import { Web3Provider } from './web3-provider';
import { Web3Wallet } from './web3-wallet';

import { ContractArtifact } from './contract-artifact';

import Config from './config';
import CONFIG from './config';

export class Web3Service {

private static _instance: Web3Service;

private _wallet: Web3Wallet;
private _provider = Web3Provider.Instance;
private _web3: any;
private _contracts: any = {};
public static web3 = new Web3(Web3.givenProvider || CONFIG.SERVER.HTTP_PROVIDER);

private constructor() { }

private async init() {
try {
this._wallet = await Web3Wallet.getInstance();

this._provider.setHookedWallet(this._wallet.keyStore);
this._provider.setRpc(Config.server.HTTP_PROVIDER);
this._provider.stopPolling();
this._provider.startPolling();

this._web3 = new Web3(this._provider.engine);
}
catch (err) {
throw err;
}
return this;
}

public async getBalance() {
try {
let address = await (this._wallet.getAddress());
let balance = this._web3.utils.fromWei(await (this._web3.eth.getBalance(address)), "ether");
return balance;
} catch (err) {
console.warn("getBalance", err);
throw err;
}
}

public async testSend() {
var fromAddr = "0xf17f52151EbEF6C7334FAD080c5704D77216b732";
var toAddr = await (this._wallet.getAddress());
var valueEth = "1";
var value = parseFloat(valueEth) * 1.0e18
var gasPrice = 1
var gas = 55555555555
this._web3.eth.sendTransaction({ from: fromAddr, to: toAddr, value: value, gasPrice: gasPrice, gas: gas }, function (err, txhash) {
console.log('error: ', err)
console.log('txhash: ', txhash)
})
}

/**
* get the trufflecontract and cache it in memory
* @param {string} contractName
*/
public async getContract(contractName: string) {
if (this._contracts[contractName]) {
return this._contracts[contractName];
}
// Get the necessary contract artifact file and instantiate it with truffle-contract.
var contractArtifact = await ContractArtifact.get(contractName);
var contract = Config.TruffleContract(contractArtifact);
// var contract = new this.Web3Provider.web3.eth.Contract(contractArtifact);
contract.setProvider(this.provider); // Set the provider for our contract.
this._contracts[contractName] = contract;

// workaround stolen from https://github.com/trufflesuite/truffle-contract/issues/57
if (typeof contract.currentProvider.sendAsync !== "function") {
contract.currentProvider.sendAsync = function () {
return contract.currentProvider.send.apply(
contract.currentProvider, arguments
);
};
}

return contract;
}

/**
* check if meta mask is used
*/
public hasMetaMask() {
return ((typeof this._web3 !== "undefined") && (this._web3.currentProvider.isMetaMask === true));
}

public isOnProperNetwork(): Promise<boolean> {
var promise: Promise<boolean> = new Promise((resolve, reject) => {

(<any>this._web3.eth.net).getNetworkType()
.then(networkType => console.log("Network type", networkType));

(<any>this._web3.eth.net).getId((err, netId) => {
if (err) {
console.warn(err);
reject(err);
} else {
console.log("Network id", netId);
if (Config.server.NETWORK_ID == null) {
console.warn("no network id specified in config, ignoring network check");
}
resolve((Config.server.NETWORK_ID == null) || (netId == Config.server.NETWORK_ID));
}
});

});

return promise;
}

public async getAddress() {
try {
let address = await (this._wallet.getAddress());
return address;
} catch (err) {
console.warn("getAddress", err);
throw err;
}
}

/**
* get the first account
*/
public async getAccount(index?): Promise<string> {
try {
let address = await (this._wallet.getAddress(index));
return address;
} catch (err) {
console.warn("getAccount", err);
throw err;
}
}

public get engine(): any { return this._provider.engine; }
public get web3(): any { return this._web3; }
public get provider() { return this._web3.currentProvider; }
public get wallet() { return this._wallet; }

public static async getInstance() {
try {
if (!Web3Service._instance) {
Web3Service._instance = await new Web3Service().init();
}
}
catch (err) {
throw err;
}
return Web3Service._instance;
public static async getAccount(index = 0): Promise<string> {
return (await this.web3.eth.getaccount())[index];
}

}
Loading

0 comments on commit 8921833

Please sign in to comment.