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()
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
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")
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
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()