계약 배포하기

Brownie가 로드될 때마다 프로젝트를 자동으로 컴파일하고 배포 가능한 각 계약에 대한 ContractContainer 객체를 만듭니다. 이 객체는 개별 배포에 액세스하기 위한 컨테이너로 사용됩니다. 또한 새 계약을 배포하는 데에도 사용됩니다.

**>>>** Token
[]
**>>>** type(Token)
<class 'brownie.network.contract.ContractContainer'>
**>>>** Token.deploy
<ContractConstructor object 'Token.constructor(string _symbol, string _name, uint256 _decimals, uint256 _totalSupply)'>

ContractContainer.deploy 함수는 새로운 스마트 컨트랙트를 배포하는 데 사용됩니다.

**>>>** Token.deploy
<ContractConstructor object 'Token.constructor(string _symbol, string _name, uint256 _decimals, uint256 _totalSupply)'>

계약 생성자 전달인자 및 거래 매개변수 사전과 함께 호출해야 하며, 이는 from 필드를 포함하는 것이 필요하며 해당 필드는 계약을 배포할 Account를 지정합니다.

**>>>** Token.deploy("Test Token", "TST", 18, 1e23, {'from': accounts[1]})

Transaction sent: 0x2e3cab83342edda14141714ced002e1326ecd8cded4cd0cf14b2f037b690b976
Transaction confirmed - block: 1   gas spent: 594186
Contract deployed at: 0x5419710735c2D6c3e4db8F30EF2d361F70a4b380
<Token Contract object '0x5419710735c2D6c3e4db8F30EF2d361F70a4b380'>

ContractContainer.deploy를 호출하면 ProjectContract 객체가 반환됩니다. 반환된 객체는 ContractContainer에도 추가됩니다.

**>>>** t = Token.deploy("Test Token", "TST", 18, 1e23, {'from': accounts[1]})

Transaction sent: 0x2e3cab83342edda14141714ced002e1326ecd8cded4cd0cf14b2f037b690b976
Transaction confirmed - block: 1   gas spent: 594186
Contract deployed at: 0x5419710735c2D6c3e4db8F30EF2d361F70a4b380
<Token Contract object '0x5419710735c2D6c3e4db8F30EF2d361F70a4b380'>

**>>>** t
<Token Contract object '0x5419710735c2D6c3e4db8F30EF2d361F70a4b380'>
**>>>** Token
[<Token Contract object '0x5419710735c2D6c3e4db8F30EF2d361F70a4b380'>]

링크되지 않은 라이브러리

컨트랙트가 라이브러리를 필요로 하는 경우, 브라우니는 가장 최근에 배포된 라이브러리에 자동으로 링크합니다. 필요한 라이브러리가 아직 배포되지 않았으면 UndeployedLibrary 예외가 발생합니다.

**>>>** MetaCoin.deploy({'from': accounts[0]})
  File "brownie/network/contract.py", line 167, in __call__
    f"Contract requires '{library}' library but it has not been deployed yet"
UndeployedLibrary: Contract requires 'ConvertLib' library but it has not been deployed yet

**>>>** Convert.deploy({'from': accounts[0]})
Transaction sent: 0xff3f5cff35c68a73658ad367850b6fa34783b4d59026520bd61b72b6613d871c
ConvertLib.constructor confirmed - block: 1   gas used: 95101 (48.74%)
ConvertLib deployed at: 0x08c4C7F19200d5636A1665f6048105b0686DFf01
<ConvertLib Contract object '0x08c4C7F19200d5636A1665f6048105b0686DFf01'>

**>>>** MetaCoin.deploy({'from': accounts[0]})
Transaction sent: 0xd0969b36819337fc3bac27194c1ff0294dd65da8f57c729b5efd7d256b9ecfb3
MetaCoin.constructor confirmed - block: 2   gas used: 231857 (69.87%)
MetaCoin deployed at: 0x8954d0c17F3056A6C98c7A6056C63aBFD3e8FA6f
<MetaCoin Contract object '0x8954d0c17F3056A6C98c7A6056C63aBFD3e8FA6f'>

계약과 상호작용하기

계약을 배포한 후에는 호출과 트랜잭션을 통해 상호작용할 수 있습니다.

계약 내의 모든 공개 함수에 대해 호출하거나 트랜잭션을 보낼 수 있습니다. 그러나 코드에 따라 항상 선호되는 방법이 있습니다.

모든 공개 계약 메서드는 ProjectContract 객체에서 동일한 이름의 클래스 메서드를 통해 사용할 수 있습니다.