function UniversalDApp (contracts, options) { this.options = options || {}; this.$el = $('
'); this.contracts = contracts; this.renderOutputModifier = options.renderOutputModifier || function(name, content) { return content; }; if (!options.vm && web3.currentProvider) { } else if (options.vm) { this.accounts = {} this.BN = EthJS.BN; this.stateTrie = new EthJS.Trie(); this.vm = new EthJS.VM(this.stateTrie); this.addAccount('3cd7232cd6f3fc66a57a6bedc1a8ed6c228fff0a327e169c2bcc5e869ed49511') this.addAccount('2ac6c190b09897cd8987869cc7b918cfea07ee82038d492abce033c75c1b1d0c') } else { var host = options.host || "localhost"; var port = options.port || "8545"; var rpc_url = options.getWeb3endpoint ? options.getWeb3endpoint() : ('http://' + host + ':' + port); web3.setProvider( new web3.providers.HttpProvider( rpc_url ) ); } } UniversalDApp.prototype.addAccount = function (privateKey, balance) { if (this.accounts) { privateKey = new Buffer(privateKey, 'hex') var address = EthJS.Util.privateToAddress(privateKey); var account = new EthJS.Account(); account.balance = balance || 'f00000000000000001'; this.vm.stateManager.trie.put(address, account.serialize()); this.accounts['0x' + address.toString('hex')] = { privateKey: privateKey, nonce: 0 }; } }; UniversalDApp.prototype.getAccounts = function (cb) { if (!this.accounts) return cb("No accounts?"); cb(null, Object.keys(this.accounts)); }; UniversalDApp.prototype.render = function () { if (this.contracts.length == 0) { this.$el.append( this.getABIInputForm() ); } else { for (var c in this.contracts) { var $contractEl = $('
'); if (this.contracts[c].address) { this.getInstanceInterface(this.contracts[c], this.contracts[c].address, $contractEl ); } else { var $title = $('').text( this.contracts[c].name ); if (this.contracts[c].bytecode) { $title.append($('
').text((this.contracts[c].bytecode.length / 2) + ' bytes')) } $contractEl.append( $title ).append( this.getCreateInterface( $contractEl, this.contracts[c]) ); } this.$el.append(this.renderOutputModifier(this.contracts[c].name, $contractEl)); } } $legend = $('
') .append( $('
').text('Attach') ) .append( $('
').text('Transact') ) .append( $('
').text('Call') ) this.$el.append( $('
') .html("Universal ÐApp powered by The Blockchain") ) this.$el.append( $legend ) return this.$el; } UniversalDApp.prototype.getContractByName = function(contractName) { for (var c in this.contracts) if (this.contracts[c].name == contractName) return this.contracts[c]; return null; }; UniversalDApp.prototype.getABIInputForm = function (cb){ var self = this; var $el = $('
'); var $jsonInput = $('