블록체인은 영구적이고 불변적이라는 것을 기억하는 것이 중요합니다. 프로젝트가 배포되면 돌이킬 수 없습니다. 이러한 이유로, 메인넷에 배포할 때 다음과 같은 프로세스를 강력히 권장합니다.
- 배포 스크립트 생성
- 로컬 개발 환경에서 스크립트 테스트
- 공개 테스트 네트워크 중 하나에서 스크립트를 다시 테스트하고 의도한대로 실행되었는지 확인합니다.
- 스크립트를 사용하여 프로젝트를 메인넷에 배포합니다.
배포가 완료되면 ethPM 패키지를 생성하여 프로젝트와 상호 작용하려는 다른 개발자들이 프로세스를 단순화 할 수 있습니다.
배포 스크립트 작성하기
배포 스크립트는 다른 Brownie 스크립트와 같은 방식으로 작동하지만, 로컬 네트워크가 아닌 다른 네트워크에 대해 작성할 때 몇 가지 주의해야 할 사항이 있습니다:
- 자신의 노드를 사용하지 않는 한, 배포 전에 로컬 계정을 잠금 해제해야합니다. 이는 스크립트 내에서 Accounts.load를 호출하여 처리됩니다. Brownie에 로컬 계정을 아직 추가하지 않은 경우 로컬 계정 관리에 대한 설명서를 참조하십시오.
- 대부분의 네트워크는 마이너에게 가스를 지불하도록 요구합니다. 값이 지정되어 있지 않으면 Brownie는 가스 가격과 한도를 자동으로 계산하지만, 경우에 따라 이러한 값을 수동으로 선언하고 싶을 수 있습니다.
다음은 로컬 계정을 잠금 해제하고 Token 계약을 배포하는 예제 스크립트입니다.
from brownie import Token, accounts
def main():
acct = accounts.load('deployment_account')
Token.deploy("My Real Token", "RLT", 18, 1e28, {'from': acct})
배포 스크립트 실행하기
실제 환경에서 스크립트를 실행하려면 명령 줄에 --network 플래그를 포함해야합니다. 예를 들어, ropsten 네트워크에 연결하고 scripts/deploy.py 를 실행하려면 다음과 같이합니다:
$ brownie run deploy.py --network ropsten
실제 네트워크에서 거래가 즉시 확인되지 않는다는 것을 기억하세요. 각 거래의 상태에 대한 알림을 볼 수 있지만, 스크립트가 완료되기까지 시간이 걸릴 수 있습니다.
실제 네트워크를 정의하고 연결하는 방법에 대한 자세한 정보는 네트워크 관리 문서를 참조하십시오.
배포 맵
Brownie는 생산 네트워크에서 체인 및 계약 이름별로 정렬된 모든 배포된 계약을 나열하는 build/deployment/ 폴더에있는 map.json 파일을 유지 관리합니다.
{
"1": {
"SolidityStorage": [
"0x73B74F5f1d1f7A00d8c33bFbD09744eD90220D12",
"0x189a7fBB0038D4b55Bd03840be0B0a38De034089"
],
"VyperStorage": [
"0xF104A50668c3b1026E8f9B0d9D404faF8E42e642"
]
}
}
각 계약에 대한 목록은 가장 최근 배포된 블록 번호로 정렬됩니다.
배포된 계약과 상호 작용하기
Brownie는 라이브 네트워크에서 계약 배포에 대한 정보를 저장합니다. 계약이 배포 된 후, 생성 된 ProjectContract 인스턴스는 Brownie 세션에서 계속 사용 가능합니다.
다음 작업은 로컬로 저장된 배포 데이터를 제거하지 않습니다.
- 동일한 네트워크에 연결 해제 및 재연결하기
- 프로젝트 닫기 및 다시 불러오기
- 브라우니 종료 및 다시 시작하기
- 계약의 소스 코드를 수정하더라도, 브라우니는 배포된 버전의 소스를 보유합니다.
다음 작업은 프로젝트에서 로컬로 저장된 배포 데이터를 제거합니다.
ContractContainer.remove을 호출하면 제거된ProjectContract인스턴스의 배포 정보가 삭제됩니다.
- 프로젝트 내의 계약 소스 파일을 제거하거나 이름을 바꾸면 Brownie가 제거 된 계약에 대한 모든 배포 정보를 삭제합니다.
build/deployments/디렉토리를 삭제하면 배포된 스마트 컨트랙트에 대한 모든 정보가 삭제됩니다.
삭제된 ProjectContract 인스턴스를 복원하거나 Brownie 외부에서 처리 된 배포에 대해 하나를 생성하려면 ContractContainer.at 메서드를 사용하십시오.
배포 소스 코드 검증
Brownie는 etherscan에서 지원하는 모든 네트워크에서 solidity 계약의 자동 소스 코드 검증 기능을 제공합니다. 배포하는 동안 계약을 검증하려면 publish_source=True 인수를 추가하십시오:
acct = accounts.load('deployment_account')
Token.deploy("My Real Token", "RLT", 18, 1e28, {'from': acct}, publish_source=True)
이미 배포된 컨트랙트를 검증하는 것도 가능합니다. 다만, 동일한 컴파일러 설정을 지정해야 합니다:
token = Token.at("0x114A107C1931de1d5023594B14fc19d077FC4dfD")
Token.publish_source(token)
개발 네트워크에서 배포 저장하기
개발 네트워크에서 배포 자산이 필요한 경우 프로젝트의 brownie-config.yaml 파일에서 dev_deployment_artifacts를 true로 설정하십시오.
이러한 일시적인 배포 아티팩트와 배포 맵의 해당 항목은 프로젝트를 다시 로드하거나 로컬 네트워크를 연결, 연결 해제, 되돌리기 또는 재설정할 때 제거됩니다.
브라우니가 시작하지 않은 개발 네트워크(예: 가나슈의 외부 인스턴스)를 사용하는 경우 해당 네트워크에서 연결을 끊을 때 배포 아티팩트는 삭제되지 않습니다. 그러나 브라우니로 해당 네트워크에 연결하면 네트워크가 재설정되고 배포 아티팩트가 삭제됩니다.
'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글
| [브라우니 (Brownie)] 23. 계정 관리 (0) | 2023.06.18 |
|---|---|
| [브라우니 (Brownie)] 22. 네트워크 관리 (0) | 2023.06.18 |
| [브라우니 (Brownie)] 20. MythX를 사용한 보안 분석 (0) | 2023.06.18 |
| [브라우니 (Brownie)] 19. 커버리지 평가 (0) | 2023.06.18 |
| [브라우니 (Brownie)] 18. 상태 기반 테스트 (1) | 2023.06.18 |