mirror of
https://github.com/jwinterm/python-monero.git
synced 2026-10-17 05:51:43 +02:00
Payment IDs can now be deterministic or non-deterministic
Also add a site salt to create them, so a given user ID will yield different payment IDs for different sites.
This commit is contained in:
@@ -12,7 +12,13 @@ Calling raw module functions is undocumented and subject to change.
|
|||||||
|
|
||||||
* Initialization:
|
* Initialization:
|
||||||
|
|
||||||
monero=Monero(daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port)
|
monero=Monero(daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port,site_salt)
|
||||||
|
|
||||||
|
Site salt is a string that's specific to your particular use.
|
||||||
|
It should be random but constant. Its intent is to cause the
|
||||||
|
same recipient identifier to map to different payment IDs for
|
||||||
|
two different users of monero-python. It is recommended to
|
||||||
|
hard code some random string in the call.
|
||||||
|
|
||||||
* Checking the current balance:
|
* Checking the current balance:
|
||||||
|
|
||||||
@@ -27,15 +33,16 @@ Calling raw module functions is undocumented and subject to change.
|
|||||||
|
|
||||||
* Create a new payment ID for a recipient:
|
* Create a new payment ID for a recipient:
|
||||||
|
|
||||||
payment_id=monero.GetPaymentID(recipient)
|
payment_id=monero.GetPaymentID(recipient,deterministic=True)
|
||||||
|
|
||||||
recipient is a string representing a user, destination, etc. The
|
recipient is a string representing a user, destination, etc. The
|
||||||
semantics of it are left to the API user. Numbers can be used if
|
semantics of it are left to the API user. Numbers can be used if
|
||||||
they're passed as strings. CheckForDeposits and other such functions
|
they're passed as strings. CheckForDeposits and other such functions
|
||||||
will return that recipient when the associated payment ID is found
|
will return that recipient when the associated payment ID is found
|
||||||
in a transaction.
|
in a transaction.
|
||||||
Payment IDs are deterministic, so asking for a payment ID for a
|
Payment IDs can be deterministic (so asking for a payment ID for a
|
||||||
given recipient will always yield the same payment ID.
|
given recipient will always yield the same payment ID) or not (so
|
||||||
|
multiple calls to GetPaymentID will yield different Payment IDs).
|
||||||
|
|
||||||
* Get the recipient corresponding to a payment ID:
|
* Get the recipient corresponding to a payment ID:
|
||||||
|
|
||||||
@@ -43,7 +50,7 @@ Calling raw module functions is undocumented and subject to change.
|
|||||||
|
|
||||||
Returns the recipient associated with the given payment ID, or None
|
Returns the recipient associated with the given payment ID, or None
|
||||||
if there is none. If there is one, it is the string that was passed
|
if there is none. If there is one, it is the string that was passed
|
||||||
to a previous call to GetPaymentID.
|
to a previous call to GetPaymentID which returned this payment ID.
|
||||||
|
|
||||||
* Check for new deposits:
|
* Check for new deposits:
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -33,18 +33,19 @@ import redisdb
|
|||||||
import payment
|
import payment
|
||||||
|
|
||||||
class Monero:
|
class Monero:
|
||||||
def __init__(self,daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port):
|
def __init__(self,daemon_host,daemon_port,wallet_host,wallet_port,redis_host,redis_port,site_salt):
|
||||||
redisdb.connect_to_redis(redis_host,redis_port)
|
redisdb.connect_to_redis(redis_host,redis_port)
|
||||||
self.daemon_host=daemon_host
|
self.daemon_host=daemon_host
|
||||||
self.daemon_port=daemon_port
|
self.daemon_port=daemon_port
|
||||||
self.wallet_host=wallet_host
|
self.wallet_host=wallet_host
|
||||||
self.wallet_port=wallet_port
|
self.wallet_port=wallet_port
|
||||||
|
self.site_salt=site_salt
|
||||||
|
|
||||||
def GetWalletBalance(self):
|
def GetWalletBalance(self):
|
||||||
return utils.RetrieveWalletBalance(self.wallet_host,self.wallet_port)
|
return utils.RetrieveWalletBalance(self.wallet_host,self.wallet_port)
|
||||||
|
|
||||||
def GetPaymentID(self,recipient):
|
def GetPaymentID(self,recipient,deterministic=True):
|
||||||
return utils.GetPaymentIDFromUserID(recipient)
|
return utils.GetPaymentIDFromUserID(recipient,deterministic,self.site_salt)
|
||||||
|
|
||||||
def GetRecipient(self,payment_id):
|
def GetRecipient(self,payment_id):
|
||||||
return utils.GetUserIDFromPaymentID(payment_id)
|
return utils.GetUserIDFromPaymentID(payment_id)
|
||||||
|
|||||||
+9
-4
@@ -34,6 +34,7 @@ import json
|
|||||||
import httplib
|
import httplib
|
||||||
import time
|
import time
|
||||||
import string
|
import string
|
||||||
|
from Crypto.Random.random import getrandbits
|
||||||
from decimal import *
|
from decimal import *
|
||||||
from log import log_error, log_warn, log_info, log_log
|
from log import log_error, log_warn, log_info, log_log
|
||||||
from redisdb import *
|
from redisdb import *
|
||||||
@@ -45,11 +46,15 @@ cached_wallet_balance=None
|
|||||||
cached_wallet_unlocked_balance=None
|
cached_wallet_unlocked_balance=None
|
||||||
cached_wallet_balance_timestamp=None
|
cached_wallet_balance_timestamp=None
|
||||||
|
|
||||||
def GetPaymentIDFromUserID(user_id):
|
def GetPaymentIDFromUserID(user_id,deterministic,site_salt=''):
|
||||||
salt="nveuweaiirv-"
|
salt="nveuweaiirv-"+site_salt+'-'
|
||||||
p = hashlib.sha256(salt+user_id).hexdigest()
|
if deterministic:
|
||||||
|
s = salt + user_id
|
||||||
|
else:
|
||||||
|
s = salt + str(getrandbits(128)) + '-' + user_id
|
||||||
|
p = hashlib.sha256(s).hexdigest()
|
||||||
try:
|
try:
|
||||||
redis_hset("paymentid",p,link.identity())
|
redis_hset("paymentid",p,user_id)
|
||||||
except Exception,e:
|
except Exception,e:
|
||||||
log_error('GetPaymentIDFromUserID: failed to set payment ID for %s to redis: %s' % (user_id,str(e)))
|
log_error('GetPaymentIDFromUserID: failed to set payment ID for %s to redis: %s' % (user_id,str(e)))
|
||||||
return p
|
return p
|
||||||
|
|||||||
Reference in New Issue
Block a user