Conversion_Kitchen_Code/kitchen_counter/Blockchain2/WriteOnBlockchain.py

220 lines
14 KiB
Python
Executable File

from web3 import Web3
from fastapi import FastAPI
from pydantic import BaseModel
from GetFromBlockChain import fetchFromBlockchainForOwner,fetchFromBlockchainForOwner_Mnf,fetchFromBlockchainForPublic,getcertainUsrsandApprovedUsers
# from MNF.settings import PRIVATE_KEY, ACCOUNT
from decryption import decryptionOfPrivate ,convertHexToBinary
import time
app = FastAPI()
# @app.get("/")
key1= "MyNextFilm"
# web3 = Web3(Web3.HTTPProvider("https://polygon-mumbai.g.alchemy.com/v2/R7E9J-rgTrtt60KzPDVCJKnURkunbiuV"))
web3 = Web3(Web3.HTTPProvider("https://rpc-mumbai.maticvigil.com/"))
CAddress = '0xCE5F0873c6CDf37003E9B69dA0110B023005DA34'
# privatekey = "0x6f06e1108b833b1918067042e13e60eda262705b80385a02d0330ce0db31d3ad"
abi = '[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_userId","type":"uint256"},{"internalType":"string","name":"_module","type":"string"},{"internalType":"string","name":"_services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"}],"name":"addApprovedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_userId","type":"uint256"},{"internalType":"string","name":"_module","type":"string"},{"internalType":"string","name":"_services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"},{"internalType":"string","name":"payloadData","type":"string"},{"internalType":"string[]","name":"_files","type":"string[]"},{"internalType":"address[]","name":"publickey","type":"address[]"}],"name":"setCertainUsersData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"},{"internalType":"string","name":"_data","type":"string"},{"internalType":"string[]","name":"Files","type":"string[]"}],"name":"setMNFOrOwnerData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"},{"internalType":"string","name":"_data","type":"string"},{"internalType":"string[]","name":"Files","type":"string[]"}],"name":"setPrivateData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"},{"internalType":"string","name":"_data","type":"string"},{"internalType":"string[]","name":"Files","type":"string[]"}],"name":"setpublicData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_userId","type":"uint256"},{"internalType":"string","name":"_module","type":"string"},{"internalType":"string","name":"_services","type":"string"},{"internalType":"uint256","name":"_project","type":"uint256"}],"name":"getCertainUsersData","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"}],"name":"getMNFOrOwnerData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"mydata","type":"string"},{"internalType":"string[]","name":"files","type":"string[]"}],"internalType":"struct MNFAccessableDataBase.MNFOwnerData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"}],"name":"getPrivateData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"mydata","type":"string"},{"internalType":"string[]","name":"files","type":"string[]"}],"internalType":"struct MNFAccessableDataBase.privateData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"userId","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"}],"name":"getProjectId","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"user_id","type":"uint256"},{"internalType":"string","name":"module","type":"string"},{"internalType":"string","name":"services","type":"string"},{"internalType":"uint256","name":"project","type":"uint256"}],"name":"getPublicData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"mydata","type":"string"},{"internalType":"string[]","name":"files","type":"string[]"}],"internalType":"struct MNFAccessableDataBase.publicData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}]'
contractInst = web3.eth.contract(address=CAddress, abi=abi)
async def uploadDataToBlockchainForOwner(privatekey,user_id,module,services,project,data,file):
try:
acc1 = web3.eth.account.from_key(privatekey).address
nonce = web3.eth.getTransactionCount(acc1)
uploadDataForOwner = contractInst.functions.setPrivateData(user_id,module,services,project,data,file).buildTransaction({
'gasPrice': web3.eth.gas_price, 'chainId': 80001, 'from': acc1, 'nonce': nonce})
signed_transaction = web3.eth.account.sign_transaction(uploadDataForOwner, private_key=privatekey)
transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction)
transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash)
tx_id = transaction_hash.hex()
return tx_id
except Exception as e:
print({"error":str(e)})
def uploadDataToBlockchainForOwner_Mnf(privatekey,user_id,module,services,project,data,file):
try:
acc1 = web3.eth.account.from_key(privatekey).address
nonce = web3.eth.getTransactionCount(acc1)
uploadDataForOwner_Mnf = contractInst.functions.setMNFOrOwnerData(user_id,module,services,project,data,file).buildTransaction({
'gasPrice': web3.eth.gas_price, 'chainId': 80001, 'from': acc1, 'nonce': nonce})
signed_transaction = web3.eth.account.sign_transaction(uploadDataForOwner_Mnf, private_key=privatekey)
transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction)
transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash)
tx_id = transaction_hash.hex()
return tx_id
except Exception as e:
print({"error":str(e)})
def uploadDataToBlockchainForPublic(privatekey,user_id,module,services,project,data,file):
try:
acc1 = web3.eth.account.from_key(privatekey).address
nonce = web3.eth.getTransactionCount(acc1)
uploadDataForPublic = contractInst.functions.setpublicData(
user_id,
module,services,project,
data,
file).buildTransaction({
'gasPrice': web3.eth.gas_price, 'chainId': 80001, 'from': acc1, 'nonce': nonce})
signed_transaction = web3.eth.account.sign_transaction(uploadDataForPublic , private_key=privatekey)
transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction)
transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash)
tx_id = transaction_hash.hex()
return tx_id
except Exception as e:
print({"error":str(e)})
def uploadDataToBlockchainForCertainUsers(privatekey,user_id,module,services,project,data,file,publickey):
try:
acc1 = web3.eth.account.from_key(privatekey).address
nonce = web3.eth.getTransactionCount(acc1)
uploadDataForcertainusers = contractInst.functions.setCertainUsersData(
user_id,
module,services,project,
data,
file,
publickey).buildTransaction({
'gasPrice': web3.eth.gas_price, 'chainId': 80001, 'from': acc1, 'nonce': nonce})
signed_transaction = web3.eth.account.sign_transaction(uploadDataForcertainusers , private_key=privatekey)
transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction)
transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash)
tx_id = transaction_hash.hex()
return tx_id
except Exception as e:
print({"error":str(e)})
def setApproval(privatekey,userAddress,user_id,module,services,project,):
try:
acc1 = web3.eth.account.from_key(privatekey).address
nonce = web3.eth.getTransactionCount(acc1)
addAprovedUsers = contractInst.functions.addApprovedUser(userAddress,
user_id,
module,services,project).buildTransaction({
'gasPrice': web3.eth.gas_price, 'chainId': 80001, 'from': acc1, 'nonce': nonce})
signed_transaction = web3.eth.account.sign_transaction(addAprovedUsers , private_key=privatekey)
transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction)
transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash)
tx_id = transaction_hash.hex()
return tx_id
except Exception as e:
print({"error":str(e)})
class Item(BaseModel):
user_id:int
Module: str
Services: str
project:int
Data: str
File:list
userPrivateKey:str
class writeForAprrove(BaseModel):
user_id:int
Module: str
Services: str
Project: int
Data: str
File:list
publicKey:list
userPrivateKey:str
@app.post("/Write/onlyOwner")
async def owner(item: Item):
try:
key = convertHexToBinary(item.userPrivateKey)
print(key)
userkey =decryptionOfPrivate(key)
# userkey = str(userkey)
# hextobainary = bytes.fromhex(userkey)
# print(hextobainary.decode('utf-8'))
# user = "0x0ebd74d51611110f8220f23255626d5455c34ff415d01ffcbd7d0380498937d8"
print(userkey)
hash= await uploadDataToBlockchainForOwner(userkey.decode('utf-8'),item.user_id,item.Module,item.Services,item.project,item.Data,item.File)
return {"tx_hash":hash}
except Exception as e:
print({"error":str(e)})
@app.post("/Write/onlyOwner&MNF")
async def ownerMNF(item: Item):
try:
key = convertHexToBinary(item.userPrivateKey)
userkey =decryptionOfPrivate(key)
hash= uploadDataToBlockchainForOwner_Mnf(userkey.decode('utf-8'),item.user_id,item.Module,item.Services,item.project,item.Data,item.File)
return {"hash":hash}
except Exception as e:
print({"error":str(e)})
@app.post("/Write/Public")
async def publicfun(item: Item):
try:
key = convertHexToBinary(item.userPrivateKey)
userkey =decryptionOfPrivate(key,key1)
hash= uploadDataToBlockchainForPublic(userkey.decode('utf-8'),item.user_id,item.Module,item.Services,item.project,item.Data,item.File)
return {"hash":hash}
except Exception as e:
print({"error":str(e)})
@app.post("/Write/CertainUsers")
async def existingUsers(value: writeForAprrove):
try:
key = convertHexToBinary(value.userPrivateKey)
userkey =decryptionOfPrivate(key)
hash= await uploadDataToBlockchainForCertainUsers(userkey.decode('utf-8'),value.user_id,value.Module,value.Services,value.project,value.Data,value.File,value.publicKey)
return {"hash":hash}
except Exception as e:
print({"error":str(e)})
@app.post("/Write/ApprovalUsers")
async def approveUsers(value: writeForAprrove):
try:
key = convertHexToBinary(value.userPrivateKey)
userkey =decryptionOfPrivate(key)
hash= await setApproval(userkey.decode('utf-8'),value.publicKey,value.user_id,value.Module,value.Services,value.Project)
return {"hash":hash}
except Exception as e:
print({"error":str(e)})
@app.get("/Fetch/Public")
async def GetPublic(private_key: str,user_id: int,Module: str, Services: str, Project:int):
key = convertHexToBinary(private_key)
userkey =decryptionOfPrivate(key)
getData= fetchFromBlockchainForPublic(userkey.decode('utf-8'), user_id,Module,Services,Project)
return {"getData":getData}
@app.get("/Fetch/onlyOwner&MNF")
async def GetOwnerMNF(private_key: str,user_id: int,Module: str, Services: str, Project:int):
key = convertHexToBinary(private_key)
userkey =decryptionOfPrivate(key)
getData=fetchFromBlockchainForOwner_Mnf(userkey.decode('utf-8'), user_id,Module,Services,Project)
return {"getData":getData}
@app.get("/Fetch/CertainUsers")
async def GetCertainUsers(private_key: str,user_id: int,Module: str, Services: str, Project:int):
key = convertHexToBinary(private_key)
userkey =decryptionOfPrivate(key)
getData= getcertainUsrsandApprovedUsers(userkey.decode('utf-8'), user_id,Module,Services,Project)
return {"getData":getData}
@app.get("/Fetch/onlyOwner")
async def GetonlyOwner(private_key: str,user_id: int,Module: str, Services: str, Project:int):
key = convertHexToBinary(private_key)
userkey =decryptionOfPrivate(key)
startTime = time.time()
result, getData= fetchFromBlockchainForOwner (userkey.decode('utf-8'), user_id,Module,Services,Project)
endTime = time.time()
finalTime = endTime-startTime
print(finalTime)
return {"getData":getData, "get_time":finalTime ,"data_found": result}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8005)