DeFi(분산금융)는 블록체인 기술을 사용해 개방적이고 투명하며 무허가형 금융 서비스를 제공함으로써 금융 산업에 혁명을 일으키고 있습니다. 이 기사에서는 Python 생태계를 사용하여 간단한 DeFi 애플리케이션을 구축하는 방법을 살펴보겠습니다. 우리는 다음 주제를 다룰 것입니다:
DeFi는 블록체인 기술을 활용하여 은행과 같은 전통적인 금융 중개 기관에 의존하지 않고 대출, 차입, 거래, 이자 수익 등의 금융 서비스를 제공합니다. DeFi의 주요 구성 요소에는 스마트 계약, 분산 애플리케이션(dApp), 이더리움과 같은 블록체인 플랫폼이 포함됩니다.
시작하기 전에 Python이 설치되어 있는지 확인하세요. Web3.py, FastAPI 및 Brownie를 포함한 여러 Python 라이브러리를 사용합니다. 가상 환경을 생성하고 필요한 패키지를 설치하십시오:
python -m venv venv
source venv/bin/activate # Windows에서는 venvScriptsactivate를 사용합니다
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; } }
Brownie를 사용하여 계약을 컴파일하고 배포합니다.
브라우니 초기화
브라우니 컴파일
브라우니 계정 새 배포자
브라우니 실행 scripts/deploy.py
scripts/deploy.py
from brownie import Token, accounts def main(): deployer = accounts.load('deployer') token = Token.deploy({'from': deployer})
스마트 계약과 상호작용하기 위해 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))
FastAPI 백엔드와 상호 작용하고 토큰 잔액을 표시하고 전송을 용이하게 하는 간단한 프런트엔드를 구축할 수 있습니다. 여기서는 최소한의 HTML 및 JavaScript 설정을 사용하여 이러한 상호 작용을 보여드리겠습니다.
index.html
<title>DeFi Application</title> <h1>DeFi Application</h1> <div> <h2>Check Balance</h2> <input type="text" id="address" placeholder="Enter address"> <button onclick="checkBalance()">Check Balance</button> <p id="balance"></p> </div> <div> <h2>Transfer Tokens</h2> <input type="text" id="to" placeholder="To address"> <input type="text" id="amount" placeholder="Amount"> <button onclick="transferTokens()">Transfer</button> <p id="transaction"></p> </div> <script> async function checkBalance() { const address = document.getElementById('address').value; const response = await fetch(`http://localhost:8000/balance/${address}`); const data = await response.json(); document.getElementById('balance').innerText = `Balance: ${data.balance} MTK`; } async function transferTokens() { const to = document.getElementById('to').value; const amount = document.getElementById('amount').value; const response = await fetch('http://localhost:8000/transfer', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ to, amount }) }); const data = await response.json(); document.getElementById('transaction').innerText = `Transaction Hash: ${data.transaction_hash}`; } </script>
FastAPI 애플리케이션을 배포하기 위해 Uvicorn을 사용할 수 있습니다. 다음 명령을 실행하여 서버를 시작하십시오.
uvicorn 앱:app --reload
DeFi 애플리케이션을 테스트하려면 웹 브라우저에서 index.html 파일을 열고 제공된 인터페이스를 사용하여 잔액을 확인하고 토큰을 전송하세요.
잔액 확인: 이더리움 주소를 입력하고 "잔액 확인"을 클릭하면 토큰 잔액을 확인할 수 있습니다.
토큰 전송: 수신자 주소와 전송할 토큰 금액을 입력한 후 "전송"을 클릭하여 거래를 시작하세요.
DeFi 애플리케이션을 구축할 때 보안이 가장 중요합니다. 다음 모범 사례를 고려하십시오.
스마트 계약 감사: 전문 보안 회사의 스마트 계약 감사를 받으세요.
개인 키 관리: 애플리케이션에 개인 키를 하드코딩하지 마세요. 안전한 키 관리 시스템을 사용하세요.
입력 검증: 재진입 공격 및 오버플로와 같은 일반적인 취약점을 방지하기 위해 모든 사용자 입력을 검증하고 삭제합니다.
속도 제한: 남용을 방지하기 위해 엔드포인트에 속도 제한을 구현합니다.
정기 업데이트: 알려진 취약점을 완화하려면 라이브러리와 종속성을 최신 상태로 유지하세요.
이 기사에서는 Python 생태계를 사용하여 간단한 DeFi 애플리케이션을 구축했습니다. DeFi의 기본 사항을 다루고 Web3.py를 사용하여 이더리움 블록체인과 상호 작용하고 스마트 계약을 생성하고 FastAPI로 백엔드를 구축하고 프런트엔드를 통합했습니다.
DeFi는 엄청난 잠재력을 갖고 빠르게 발전하는 분야입니다. 프로젝트의 향후 방향은 다음과 같습니다.
더 많은 DeFi 프로토콜 통합: 대출 플랫폼(예: Aave) 또는 분산형 거래소(예: Uniswap)와 같은 다른 DeFi 프로토콜 통합을 살펴보세요.
프런트엔드 강화: React.js 또는 Vue.js와 같은 프레임워크를 사용하여 더욱 정교한 프런트엔드를 구축하세요.
사용자 인증 추가: 사용자 인증 및 승인을 구현하여 보다 개인화된 경험을 만드세요.
스마트 계약 기능 확장: 스테이킹, 거버넌스, 이자 농사 등 스마트 계약에 더 많은 기능을 추가하세요.
이 시스템을 자유롭게 확장하고 새로운 기능과 프로토콜을 실험해 보세요. 즐거운 코딩하세요!
위 내용은 Python 생태계를 사용하여 탈중앙화 금융(DeFi) 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!