Back to Library QID: #69106

Solution for QID #69106: class Ethereum { constructor () { this.engine = new Pro | StudyHelpMe

Subject: Computer Science
Status: Made to Order
class Ethereum {   constructor () {     this.engine = new ProviderEngine();     this.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));     //this.web3 = new Web3(this.engine);     //this.utils = new Utils();     this.pendingTransactions = [];     this.addWeb3Commands();     this.initWeb3Provider();     //convert the contracts into usable objects     this.Agent = contract(agentJson);     this.AgentRegistry = contract(agentRegistryJson);     this.Relationship = contract(relationshipJson);     //Provision the contract with a web3 provider     this.Agent.setProvider(this.engine);     this.AgentRegistry.setProvider(this.engine);     this.Relationship.setProvider(this.engine);     //the value stores access to privateKeys and addresses     this.vault = null;     //saves the user password so they don't have to enter it for every transaction     this.pwDerivedKey = null;   }   waitForVault () {     return new Promise((resolve, reject) => {       let check = () => {         if(this.vault && this.pwDerivedKey) {           resolve(this.vault);         }else {           setTimeout(check, 200);         }       };       check();     });   }   waitForRPCConn () {     return new Promise((resolve, reject) => {       let timer;       let check = () => {         this.web3.eth.net.isListening().then(listening => {           if(listening) {             clearTimeout(timer);             resolve();           }         }).catch(() => {});       };       timer = setInterval(check, 2000);       check();     });   }   //add some non standard web3 commands to the web3 api   addWeb3Commands () {     function toStringVal (val) {       return String(val);     }     function toBoolVal (val) {       if(String(val) == 'true') {         return true;       }       return false;     }     function toIntVal (val) {       return parseInt(val);     }     this.web3.extend({       property: 'personal',       methods: [new this.web3.extend.Method({         name: 'unlockAccount',         call: 'personal_unlockAccount',         params: 3,         inputFormatter: [this.web3.extend.utils.toAddress, toStringVal, toIntVal],         outputFormatter: toBoolVal,       })],     });     this.web3.extend({       property: 'personal',       methods: [new this.web3.extend.Method({         name: 'importRawKey',         call: 'personal_importRawKey',         params: 2,         inputFormatter: [this.web3.extend.utils.toAddress, toStringVal],       })],     });     this.web3.extend({       property: 'miner',       methods: [new this.web3.extend.Method({         name: 'start',         call: 'miner_start',         params: 0,       })],     });   }   //initialize the modular Web3 API provider   initWeb3Provider () {     //filters     //this.engine.addProvider(new FilterSubprovider());     //pending nonce     this.engine.addProvider(new NonceSubprovider());     //accounts management     this.engine.addProvider(new HookedWalletSubprovider({       getAccounts: (cb) => {         this.getVault()           .then(vault => {             if(vault) {               cb(null, vault.getAddresses());             }else {               cb('no keys available, login frst', null);             }           });       },       signMessage: (options, cb) => {         this.getVault().then(vault => {           var secretKey = vault.exportPrivateKey(options.from, this.pwDerivedKey);           var msg = new Buffer(options.data.replace('0x', ''), 'hex');           let msgHash = Utils.hashPersonalMessage(msg);           let sgn = Utils.ecsign(msgHash, new Buffer(secretKey, 'hex'));           let signedMsgHex = Utils.bufferToHex(Buffer.concat([             Utils.setLengthLeft(sgn.r, 32),             Utils.setLengthLeft(sgn.s, 32),             Utils.toBuffer(sgn.v),           ]));           //Utils.toRpcSig(sgn.v, sgn.r, sgn.s);           cb(null, signedMsgHex);         });       },       signTransaction: (txObject, cb) => {         this.getVault().then(vault => {           txObject.gas = '0x1000000';           txObject.gasLimit = '0x1000000';           let tx = new Transaction(txObject);           let rawTX = tx.serialize().toString('hex');           let signedTx = '0x' + signing.signTx( } }  
ZERO AI
Human Written
PHD EXPERTS
Verified
TURNITIN
Clean Report
FAST DELIVERY
Instant/Hourly