Example #1
0
    def process(self, commit, *args, **kwargs):
        data = commit.data

        oracleRate = OracleRate()

        oracleRate.oracle = data.get("oracle")
        oracleRate.signer = data.get("signer")
        oracleRate.raw_rate = data.get("rate")

        median_rate = self.update_or_insert_rate(data)

        contract_connection_oracle = ContractConnection(eth_conn, oracleRate.oracle, ABI_PATH)
        contract_oracle = contract_connection_oracle.contract.functions

        signer_name = contract_oracle.nameOfSigner(oracleRate.signer).call()
        decimals = contract_oracle.decimals().call()
        median_rate_decimals = int(median_rate) / (10 ** 18) / (10 ** decimals)

        get_symbol = oracle_factory_interface.get_symbol(oracleRate.oracle)
        rate_decimals = int(oracleRate.raw_rate) / (10 ** 18) / (10 ** decimals)

        signer_balance = eth_conn.w3.eth.getBalance(oracleRate.signer)
        signer_balance_eth = int(signer_balance) / (10 ** 18) 

        # Webhook all provides
        self.all_provides_webhook(oracleRate, get_symbol, signer_name, rate_decimals, median_rate_decimals, commit)

        block_timestamp_latest =  contract_connection_oracle.w3.eth.getBlock('latest').timestamp
        block_timestamp_event = commit.timestamp

        #Webhook for alerts 
        if ((block_timestamp_latest - block_timestamp_event) < 100):   
            self.alert_webhook_signers_outdated(oracleRate, get_symbol, signer_name)
            self.alert_webhook_median_abrupt_change(oracleRate, get_symbol, median_rate)

        oracleRate.signer_name = signer_name
        oracleRate.rate = str("{:.10f}".format(rate_decimals))
        oracleRate.median_rate = str("{:.10f}".format(median_rate_decimals))
        oracleRate.raw_median_rate = str(median_rate)
        oracleRate.symbol = get_symbol
        oracleRate.timestamp = str(commit.timestamp)
        oracleRate.time_bson = datetime.fromtimestamp(commit.timestamp)
        oracleRate.signer_balance = str("{:.10f}".format(signer_balance_eth))
        
        commit.save()
        oracleRate.save()

        
Example #2
0
    def get_descriptor(self, data):

        contract_connection_model = ContractConnection(eth_conn, MODEL_ADDRESS, ABI_PATH)
        contract_model = contract_connection_model.contract.functions
        loan_data = data.get("loanData")

        descriptor = {}

        descriptor["first_obligation"] = "0"
        descriptor["total_obligation"] = "0"
        descriptor["duration"] = "0"
        descriptor["interest_rate"] = "0"
        descriptor["punitive_interest_rate"] = "0"
        descriptor["frequency"] = "0"
        descriptor["installments"] = "0"

        if loan_data:
            contract_model.validate(loan_data).call()

            first_obligation_amount, first_obligation_time = contract_model.simFirstObligation(loan_data).call()
            total_obligation = contract_model.simTotalObligation(loan_data).call()
            duration = contract_model.simDuration(loan_data).call()

            descriptor["first_obligation"] = str(first_obligation_amount)
            descriptor["total_obligation"] = str(total_obligation)

            descriptor["duration"] = str(duration)
            descriptor["punitive_interest_rate"] = str(contract_model.simPunitiveInterestRate(loan_data).call())
            descriptor["frequency"] = str(contract_model.simFrequency(loan_data).call())
            descriptor["installments"] = str(contract_model.simInstallments(loan_data).call())

            periodic_rate = np.rate(
                int(descriptor["installments"]),
                int(descriptor["first_obligation"]),
                -int(data["amount"]),
                0,
                maxiter=9999999999999
            )

            annual_rate = float(periodic_rate) * (86400 * 360) / int(descriptor["frequency"])
            perc_rate = annual_rate * 100
            perc_rate_round = round(perc_rate, 2)

            descriptor["interest_rate"] = str(perc_rate_round)
        return descriptor
Example #3
0
from clock import Clock
from utils import get_data
from collateral_interface import CollateralInterface


COLLATERAL_ADDRESS = os.environ.get("COLLATERAL_ADDRESS")

# Mejorar esto
ABI_PATH = os.path.join(
    "/project/abi",
    "collateral.json"
)

URL_NODE = os.environ.get("URL_NODE")
eth_conn = EthereumConnection(URL_NODE)
contract_connection = ContractConnection(eth_conn, COLLATERAL_ADDRESS, ABI_PATH)

collateral_interface = CollateralInterface(contract_connection)

logger = logging.getLogger(__name__)


class DebtList(PaginatedListAPI):
    serializer = DebtSerializer()

    error = BoolParam("Error filter")
    model = StringParam("Model filter")
    model__ne = StringParam("Model not filter")
    creator = StringParam("Creator filter")
    creator__ne = StringParam("Creator not filter")
    oracle = StringParam("Oracle filter")
Example #4
0
from ethereum_connection import ContractConnection

from .loan_manager_interface import LoanManagerInterface


ADDRESS = os.environ.get("LOAN_MANAGER_ADDRESS")

ABI_PATH = os.path.join(
    os.path.dirname(os.path.realpath(__file__)),
    "abi.json"
)
URL_NODE = os.environ.get("URL_NODE")


eth_conn = EthereumConnection(URL_NODE)
contract_connection = ContractConnection(eth_conn, ADDRESS, ABI_PATH)

loan_manager_interface = LoanManagerInterface(contract_connection)

from .handlers.approved import Approved
from .handlers.approved_error import ApprovedError
from .handlers.approved_rejected import ApprovedRejected
from .handlers.canceled import Canceled
from .handlers.cosigned import Cosigned
from .handlers.lent import Lent
from .handlers.readed_oracle import ReadedOracle
from .handlers.requested import Requested
from .handlers.settled_cancel import SettledCancel
from .handlers.settled_lend import SettledLend
from .handlers.approved_by_callback import ApprovedByCallback
from .handlers.approved_by_signature import ApprovedBySignature
Example #5
0
 def readSample(self, data, oracle):
     contract_connection_oracle = ContractConnection(eth_conn, oracle, ABI_PATH)
     contract_oracle = contract_connection_oracle.contract.functions
     return contract_oracle.readSample(data).call()