def setConfig(self, configTuple, retries=0): self.chain, self.channame, self.default_fee, self.minconf, \ self.bmuser, self.bmpswd, self.bmhost, self.bmport, \ self.btcuser, self.btcpswd, self.btchost, self.btcport = configTuple if self.chain == 'testnet': self.netcode = 'XTN' pob_address = "msj42CCGruhRsFrGATiUuh25dtxYtnpbTx" elif self.chain == 'mainnet': self.netcode = 'BTC' pob_address = "1METAMARKETxxxxxxxxxxxxxxxxx4TPjws" else: raise Exception("Config: chain must be either testnet or mainnet.") MM_util.connect_btcd(self.btcuser, self.btcpswd, self.btchost, self.btcport) MM_util.connect_bm(self.bmuser, self.bmpswd, self.bmhost, self.bmport) MM_util.minconf = self.minconf MM_util.pob_address = pob_address try: self.chan_v3 = MM_util.bm.getDeterministicAddress( base64.b64encode(self.channame), 3, 1) self.chan_v4 = MM_util.bm.getDeterministicAddress( base64.b64encode(self.channame), 4, 1) self.feePerKB = MM_util.btcd.estimatefee(6) except socket.error: self.sockErr() except httplib.BadStatusLine: MM_util.reconnect_btcd(retries) return self.setConfig(configTuple, retries + 1)
def login(self, retries=0): credentials = self.showLoginDlg() if not credentials: return self.username, self.passphrase = credentials hash = hashlib.sha256(self.passphrase).hexdigest() pkbytes = scrypt.hash(hash, self.username, N=2**18, buflen=32) self.pkstr = pycoin.serialize.b2h(pkbytes) se = long(self.pkstr, 16) pk = pycoin.key.Key(secret_exponent=se, netcode=self.netcode) self.wif = pk.wif() self.btcaddr = pk.address() try: self.bmaddr = MM_util.bm.getDeterministicAddress( base64.b64encode(self.pkstr), 4, 1) wp = self.input( "Please enter your Bitcoin Core wallet encryption passphrase:", password=True) if not wp: return MM_util.unlockwallet(wp) addrismine = MM_util.btcd.validateaddress(self.btcaddr)['ismine'] except bitcoinrpc.authproxy.JSONRPCException as jre: if jre.error['code'] == -14: self.info( "The passphrase was not correct. Please try logging in again." ) return except socket.error: self.sockErr() except httplib.BadStatusLine: MM_util.reconnect_btcd(retries) return self.login(retries + 1) if MM_util.bm.createDeterministicAddresses(base64.b64encode(self.pkstr)) == [] \ or not addrismine: if not self.importkeys(): return myidstr = MM_util.createidentmsgstr(self.btcaddr, self.bmaddr, self.username) self.myid = MM_util.MM_loads(self.btcaddr, myidstr) identlist = self.listDict['ident'] = MM_util.loadlist('ident') if not MM_util.searchlistbyhash(identlist, self.myid.hash): if not self.register(myidstr): return self.info("You are now logged in as: %s" % self.username) self.loggedIn = True self.updateUi()
def importkeys(self, retries=0): if self.yorn("Bitcoin private key not found in wallet or "+\ "Bitmessage identity does not exist. Import your "+\ "BTC private key and create your BM ID?"): pass2 = self.input("Please re-enter your passphrase:", password=True) if pass2 == self.passphrase: try: MM_util.btcd.importprivkey(self.wif, self.username, False) except httplib.BadStatusLine: MM_util.reconnect_btcd(retries) return self.importkeys(retries + 1) self.info("REMEMBER TO SECURELY BACKUP YOUR wallet.dat file!") return True else: self.info("Passphrase did not match.") return False else: MM_util.bm.deleteAddress(self.bmaddr) return False