Esempio n. 1
0
    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)
Esempio n. 2
0
    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()
Esempio n. 3
0
    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