애플리케이션 배포

FastAPI 애플리케이션을 배포하기 위해 Uvicorn을 사용할 수 있습니다. 다음 명령을 실행하여 서버를 시작하십시오:

uvicorn 앱:app --reload

DeFi 애플리케이션 테스트

DeFi 애플리케이션을 테스트하려면 웹 브라우저에서 index.html 파일을 열고 제공된 인터페이스를 사용하여 잔액을 확인하고 토큰을 전송하세요.

  1. 잔액 확인: 이더리움 주소를 입력하고 \\\"잔액 확인\\\"을 클릭하면 토큰 잔액을 확인할 수 있습니다.

  2. 토큰 전송: 수신자 주소와 전송할 토큰 금액을 입력한 다음 \\\"전송\\\"을 클릭하여 거래를 시작하세요.

보안 고려 사항

DeFi 애플리케이션을 구축할 때 보안이 가장 중요합니다. 다음 모범 사례를 고려하세요.

  1. 스마트 계약 감사: 전문 보안 회사의 스마트 계약 감사를 받으세요.

  2. 개인 키 관리: 애플리케이션에 개인 키를 하드코딩하지 마세요. 안전한 키 관리 시스템을 사용하세요.

  3. 입력 검증: 재진입 공격 및 오버플로와 같은 일반적인 취약점을 방지하기 위해 모든 사용자 입력을 검증하고 삭제합니다.

  4. 비율 제한: 남용을 방지하기 위해 엔드포인트에 비율 제한을 구현합니다.

  5. 정기 업데이트: 알려진 취약점을 완화하려면 라이브러리와 종속성을 최신 상태로 유지하세요.

결론 및 향후 방향

\\\"Defi\\\"

이 기사에서는 Python 생태계를 사용하여 간단한 DeFi 애플리케이션을 구축했습니다. DeFi의 기본 사항을 다루고, Web3.py를 사용하여 이더리움 블록체인과 상호 작용하고, 스마트 계약을 생성하고, FastAPI로 백엔드를 구축하고, 프런트엔드를 통합했습니다.

DeFi는 엄청난 잠재력을 갖고 빠르게 발전하는 분야입니다. 프로젝트의 향후 방향은 다음과 같습니다.

이 시스템을 자유롭게 확장하고 새로운 기능과 프로토콜을 실험해 보세요. 즐거운 코딩하세요!

","image":"http://www.luping.net","datePublished":"2024-07-31T16:30:03+08:00","dateModified":"2024-07-31T16:30:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python 생태계를 사용하여 탈중앙화 금융(DeFi) 애플리케이션 구축

Python 생태계를 사용하여 탈중앙화 금융(DeFi) 애플리케이션 구축

2024-07-31에 게시됨
검색:801

DeFi(분산형 금융)는 블록체인 기술을 사용해 개방적이고 투명하며 허가가 필요 없는 금융 서비스를 제공함으로써 금융 산업에 혁명을 일으키고 있습니다. 이 기사에서는 Python 생태계를 사용하여 간단한 DeFi 애플리케이션을 구축하는 방법을 살펴보겠습니다. 우리는 다음 주제를 다룰 것입니다:

  • DeFi 소개
  • 개발 환경 설정
  • 블록체인과 상호작용
  • 스마트 계약 생성
  • FastAPI로 백엔드 구축
  • Web3.py와 프런트엔드 통합
  • 애플리케이션 배포
  • DeFi 애플리케이션 테스트
  • 보안 고려 사항
  • 결론 및 향후 방향

디파이 소개

DeFi는 블록체인 기술을 활용하여 은행과 같은 전통적인 금융 중개 기관에 의존하지 않고 대출, 차입, 거래, 이자 수익 등의 금융 서비스를 제공합니다. DeFi의 주요 구성 요소에는 스마트 계약, 분산 애플리케이션(dApp), 이더리움과 같은 블록체인 플랫폼이 포함됩니다.

개발 환경 설정

시작하기 전에 Python이 설치되어 있는지 확인하세요. Web3.py, FastAPI 및 Brownie를 포함한 여러 Python 라이브러리를 사용합니다. 가상 환경을 생성하고 필요한 패키지를 설치합니다:

python -m venv venv
source venv/bin/activate # Windows에서는 venv\Scripts\activate
를 사용합니다. pip 설치 web3 fastapi uvicorn pydantic 브라우니

블록체인과의 상호작용

우리는 Web3.py를 사용하여 이더리움 블록체인과 상호 작용할 것입니다. 먼저 블록체인 네트워크(Ropsten 테스트넷 사용)에 연결하고 주소 잔액을 확인하겠습니다.

blockchain.py

from web3 import Web3

# Connect to the Ropsten testnet
infura_url = 'https://ropsten.infura.io/v3/YOUR_INFURA_PROJECT_ID'
web3 = Web3(Web3.HTTPProvider(infura_url))

def check_balance(address):
    balance = web3.eth.get_balance(address)
    return web3.fromWei(balance, 'ether')

스마트 계약 생성

스마트 계약은 계약 조건이 코드에 직접 작성된 자체 실행 계약입니다. Solidity를 사용하여 토큰에 대한 간단한 스마트 계약을 작성하겠습니다.

contracts/Token.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Token {
    string public name = "MyToken";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint256 public totalSupply = 1000000 * (10 ** uint256(decimals));
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor() {
        balanceOf[msg.sender] = totalSupply;
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        require(_to != address(0));
        require(balanceOf[msg.sender] >= _value);

        balanceOf[msg.sender] -= _value;
        balanceOf[_to]  = _value;

        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_to != address(0));
        require(balanceOf[_from] >= _value);
        require(allowance[_from][msg.sender] >= _value);

        balanceOf[_from] -= _value;
        balanceOf[_to]  = _value;
        allowance[_from][msg.sender] -= _value;

        emit Transfer(_from, _to, _value);
        return true;
    }
}

브라우니를 사용하여 계약을 컴파일하고 배포합니다.

브라우니 초기화
브라우니 컴파일
브라우니 계정 새 배포자
브라우니 실행 scripts/deploy.py

scripts/deploy.py

from brownie import Token, accounts

def main():
    deployer = accounts.load('deployer')
    token = Token.deploy({'from': deployer})

Defi diagram

FastAPI를 사용하여 백엔드 구축

우리는 스마트 계약과 상호 작용하기 위해 FastAPI 백엔드를 생성할 것입니다. 백엔드는 잔액 확인 및 토큰 전송을 위한 엔드포인트를 제공합니다.

app.py

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from web3 import Web3
import json

app = FastAPI()

infura_url = 'https://ropsten.infura.io/v3/YOUR_INFURA_PROJECT_ID'
web3 = Web3(Web3.HTTPProvider(infura_url))
contract_address = 'YOUR_CONTRACT_ADDRESS'
abi = json.loads('[YOUR_CONTRACT_ABI]')

contract = web3.eth.contract(address=contract_address, abi=abi)
deployer = web3.eth.account.privateKeyToAccount('YOUR_PRIVATE_KEY')

class TransferRequest(BaseModel):
    to: str
    amount: float

@app.get("/balance/{address}")
async def get_balance(address: str):
    try:
        balance = contract.functions.balanceOf(address).call()
        return {"balance": web3.fromWei(balance, 'ether')}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

@app.post("/transfer")
async def transfer_tokens(transfer_request: TransferRequest):
    try:
        to_address = transfer_request.to
        amount = web3.toWei(transfer_request.amount, 'ether')
        nonce = web3.eth.getTransactionCount(deployer.address)
        txn = contract.functions.transfer(to_address, amount).buildTransaction({
            'chainId': 3,
            'gas': 70000,
            'gasPrice': web3.toWei('1', 'gwei'),
            'nonce': nonce,
        })
        signed_txn = web3.eth.account.signTransaction(txn, private_key=deployer.key)
        tx_hash = web3.eth.sendRawTransaction(signed_txn.rawTransaction)
        return {"transaction_hash": web3.toHex(tx_hash)}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

Web3.py와 프런트엔드 통합

FastAPI 백엔드와 상호 작용하고 토큰 잔액을 표시하고 전송을 용이하게 하는 간단한 프런트엔드를 구축할 수 있습니다. 여기서는 최소한의 HTML 및 JavaScript 설정을 사용하여 이 상호 작용을 보여드리겠습니다.

index.html



    DeFi Application


    

DeFi Application

Check Balance

Transfer Tokens

애플리케이션 배포

FastAPI 애플리케이션을 배포하기 위해 Uvicorn을 사용할 수 있습니다. 다음 명령을 실행하여 서버를 시작하십시오:

uvicorn 앱:app --reload

DeFi 애플리케이션 테스트

DeFi 애플리케이션을 테스트하려면 웹 브라우저에서 index.html 파일을 열고 제공된 인터페이스를 사용하여 잔액을 확인하고 토큰을 전송하세요.

  1. 잔액 확인: 이더리움 주소를 입력하고 "잔액 확인"을 클릭하면 토큰 잔액을 확인할 수 있습니다.

  2. 토큰 전송: 수신자 주소와 전송할 토큰 금액을 입력한 다음 "전송"을 클릭하여 거래를 시작하세요.

보안 고려 사항

DeFi 애플리케이션을 구축할 때 보안이 가장 중요합니다. 다음 모범 사례를 고려하세요.

  1. 스마트 계약 감사: 전문 보안 회사의 스마트 계약 감사를 받으세요.

  2. 개인 키 관리: 애플리케이션에 개인 키를 하드코딩하지 마세요. 안전한 키 관리 시스템을 사용하세요.

  3. 입력 검증: 재진입 공격 및 오버플로와 같은 일반적인 취약점을 방지하기 위해 모든 사용자 입력을 검증하고 삭제합니다.

  4. 비율 제한: 남용을 방지하기 위해 엔드포인트에 비율 제한을 구현합니다.

  5. 정기 업데이트: 알려진 취약점을 완화하려면 라이브러리와 종속성을 최신 상태로 유지하세요.

결론 및 향후 방향

Defi

이 기사에서는 Python 생태계를 사용하여 간단한 DeFi 애플리케이션을 구축했습니다. DeFi의 기본 사항을 다루고, Web3.py를 사용하여 이더리움 블록체인과 상호 작용하고, 스마트 계약을 생성하고, FastAPI로 백엔드를 구축하고, 프런트엔드를 통합했습니다.

DeFi는 엄청난 잠재력을 갖고 빠르게 발전하는 분야입니다. 프로젝트의 향후 방향은 다음과 같습니다.

  • 더 많은 DeFi 프로토콜 통합: 대출 플랫폼(예: Aave) 또는 분산형 거래소(예: Uniswap)와 같은 다른 DeFi 프로토콜 통합을 살펴보세요.

  • 프런트엔드 강화: React.js 또는 Vue.js와 같은 프레임워크를 사용하여 더욱 정교한 프런트엔드를 구축하세요.

  • 사용자 인증 추가: 사용자 인증 및 승인을 구현하여 보다 개인화된 환경을 조성하세요.

  • 스마트 계약 기능 확장: 스마트 계약에 스테이킹, 거버넌스, 수익 농사 등 더 많은 기능을 추가하세요.

이 시스템을 자유롭게 확장하고 새로운 기능과 프로토콜을 실험해 보세요. 즐거운 코딩하세요!

릴리스 선언문 이 기사는 https://dev.to/rishishharma/building-a-decentralized-finance-defi-application-using-python-ecosystem-o6j?1에서 복제됩니다. 침해가 있는 경우에는 [email protected]으로 문의하세요. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3