70 lines
1.3 KiB
Python
70 lines
1.3 KiB
Python
|
#! /usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
# vim:fenc=utf-8
|
||
|
#
|
||
|
# Copyright © 2020 <pavle.portic@tilda.center>
|
||
|
#
|
||
|
# Distributed under terms of the BSD 3-Clause license.
|
||
|
|
||
|
from decimal import Decimal
|
||
|
|
||
|
from fastapi import APIRouter
|
||
|
|
||
|
from .. import blockchain, identifier
|
||
|
from ..schemas import Transaction
|
||
|
|
||
|
router = APIRouter()
|
||
|
|
||
|
|
||
|
@router.post('/mine', status_code=200)
|
||
|
async def mine():
|
||
|
last_block = blockchain.last_block
|
||
|
proof = blockchain.proof_of_work(last_block)
|
||
|
blockchain.new_transaction(
|
||
|
sender='0',
|
||
|
recipient=identifier,
|
||
|
amount=Decimal(1),
|
||
|
timestamp=None,
|
||
|
mine=True,
|
||
|
)
|
||
|
|
||
|
previous_hash = blockchain.hash(last_block)
|
||
|
block = blockchain.new_block(proof, previous_hash)
|
||
|
|
||
|
return {
|
||
|
'msg': 'New Block Forged',
|
||
|
'index': block['index'],
|
||
|
'transactions': block['transactions'],
|
||
|
'proof': block['proof'],
|
||
|
'previous_hash': block['previous_hash'],
|
||
|
}
|
||
|
|
||
|
|
||
|
@router.post('/transactions', status_code=202)
|
||
|
async def create_transaction(request: Transaction):
|
||
|
blockchain.new_transaction(
|
||
|
request.sender,
|
||
|
request.recipient,
|
||
|
request.amount,
|
||
|
request.timestamp,
|
||
|
)
|
||
|
|
||
|
return {
|
||
|
'msg': f'Transaction sent'
|
||
|
}
|
||
|
|
||
|
|
||
|
@router.get('/chain', status_code=200)
|
||
|
async def full_chain():
|
||
|
return {
|
||
|
'chain': blockchain.chain,
|
||
|
'length': len(blockchain.chain),
|
||
|
}
|
||
|
|
||
|
|
||
|
@router.get('/identifier', status_code=200)
|
||
|
async def get_identifier():
|
||
|
return {
|
||
|
'identifier': identifier
|
||
|
}
|