개발/web3

[Brownie + React] ganache 계정 고정하기

코드아키택트 2022. 5. 8. 18:03
반응형

 지난 글에선 ganche-cli 커맨드 기반으로 돌아가는 기본 네트워크를 ganache기반으로 돌아가도록 바꿨다. 하지만 문제는 또 발생한다. brownie-mix 중 react-mix를 사용하려면 "brownie console" 커맨드를 사용하는게 필수로 보인다. 하지만 로컬 ganache로 테스트할때 계속 기본 계정 주소들이 바꾸어 어려움이 있었다. 오늘은 이 문제를 해결한 내용을 올린다

문제상황

brownie console 실행마다 ganache의 계정 바뀜
❯ brownie console
Brownie v1.18.1 - Python development framework for Ethereum

ReactProject is the active project.

Launching 'ganache --chain.vmErrorsOnRPCResponse true --hardfork istanbul'...
Brownie environment is ready.
>>> accounts
[
<Account '0xDEE6e646EE113B9FddA7Ef5f4f6B19F97a62796D'>, 
<Account '0x9816BC7641239E5679b7886E198D6093f42d0C2E'>, 
<Account '0xcaFE658B46C8EAF01d9c6660a9199F9c3699815B'>, 
<Account '0xF887A2005A5dC334DA5f0A8140c36Ef625697e7d'>, 
<Account '0x33446e99301291eD98F237143F7d7f0F859EEA50'>, 
<Account '0xc289265bAfeCbe583A585E2DE5cb206A61299261'>, 
<Account '0x6d5C3826ec789451f37bbcA35f3567F5DF14723c'>, 
<Account '0x7Dc0cc5A905Bb482A1A3B91C2E198c34903FCC58'>, 
<Account '0xbB39190A249267816718E0e289065105d299EB33'>, 
<Account '0xE1EEcd458F9ba50E6DcfA8300583De451f65aE74'>
]
>>> exit()
Terminating local RPC client...
❯ brownie console
Brownie v1.18.1 - Python development framework for Ethereum

ReactProject is the active project.

Launching 'ganache --chain.vmErrorsOnRPCResponse true --hardfork istanbul'...
Brownie environment is ready.
>>> accounts
[
<Account '0xF7A222D95a63bD7D8e90FAeEfD38a9885C240fF6'>, 
<Account '0x69b363a01d84115dcdB2010ce57F94770A22662d'>, 
<Account '0xD8Aaa2B1cF1aa96917dB14C5513e4F3f5FD8639E'>, 
<Account '0x35b23A9EaC2877338ec4a96C5e8dd799F8bE16D2'>, 
<Account '0xEd184232F860156347b4e98Ae7a9Ad8fBA9a48B6'>, 
<Account '0x95C06Bf709Bc28c0d40B623a54160D8fB0981cF9'>, 
<Account '0xfb6001795D08d4E37602029c9eb3D54342CC91E9'>, 
<Account '0x6CBB40221a1d350F9Bf15a4A070B0e156A3C41f8'>, 
<Account '0x88381A37c42017b9a14BAD631E1e8ED0018A6dDf'>, 
<Account '0x1957Bab594d2dd9e9c3433E307931365c29faaEB'>
]

위의 커맨드는 brownie console을 두번 실행했을때 결과를 복붙했다. 각 실행에서 첫번째 주소만 가져오면 아래와 같다.

1 --> <Account '0xDEE6e646EE113B9FddA7Ef5f4f6B19F97a62796D'>
2 --> <Account '0xF7A222D95a63bD7D8e90FAeEfD38a9885C240fF6'>

위와 같은 상황은 메타마스크를 localhost와 연결할때 문제를 만든다. 왜냐하면 메타마스크를 이용해 컨트랙트를 실행하려면 계정에 잔고가 있어야 한는데 매번 바뀌면 매번 계정을 다시 등록해야하는 번거로움이 생기기 때문이다.

 

해결

ganache -> "ganache-d"

https://github.com/trufflesuite/ganache

https://docs.nethereum.com/en/latest/ethereum-and-clients/ganache-cli/

위의 두 링크를 참조했다. 기존에 등록한 development 네트워크의 cmd=ganache인데 이것을 ganache -d로 등록하면 된다. 여기서 d는 deterministic의 약자로, 이미 결정된 정도로 해석할 수 있을것 같다. 

 기존 네트워크를 지우고 새로 등록하는 부분은 지난 글에서 다뤘다. 여기서 지우는 부분은 생략하고 새로 등록하는 부분 커맨드만 쓰면 아래와 같다

brownie networks add Development development cmd="ganache -d" host=http://127.0.0.1:8545 name=ganache-cli

중간에 "ganache -d" 부분을 볼 수 있다. 띄어쓰기 문제가 생길거 같아서 위와 같이 처리했고 잘 작동했다

 

결과

매 brownie console 실행마다 같은 주소 확인
❯ brownie console
Brownie v1.18.1 - Python development framework for Ethereum

ReactProject is the active project.

Launching 'ganache -d --chain.vmErrorsOnRPCResponse true --hardfork istanbul'...
Brownie environment is ready.
>>> accounts
[<Account '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1'>, <Account '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'>, <Account '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b'>, <Account '0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d'>, <Account '0xd03ea8624C8C5987235048901fB614fDcA89b117'>, <Account '0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC'>, <Account '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9'>, <Account '0x28a8746e75304c0780E011BEd21C72cD78cd535E'>, <Account '0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E'>, <Account '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e'>]
>>> exit()
Terminating local RPC client...
❯ brownie console
Brownie v1.18.1 - Python development framework for Ethereum

ReactProject is the active project.

Launching 'ganache -d --chain.vmErrorsOnRPCResponse true --hardfork istanbul'...
aBrownie environment is ready.
>>> accounts
[<Account '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1'>, <Account '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'>, <Account '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b'>, <Account '0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d'>, <Account '0xd03ea8624C8C5987235048901fB614fDcA89b117'>, <Account '0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC'>, <Account '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9'>, <Account '0x28a8746e75304c0780E011BEd21C72cD78cd535E'>, <Account '0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E'>, <Account '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e'>]

위 커맨드 흐름은 실행 -> 계정확인 -> 종료 / 실행 -> 계정확인 순서다

 accounts커맨드 밑에 계정 리스트를 보면 같은 계정들이 연속되는 것을 볼 수 있다.

 

보너스 : Metamask에 등록하기

다른 커맨드창에 ganache -d 입력 --> private key 등록

Private Keys
==================
(0) 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d
(1) 0x6cbed15c793ce57650b9877cf6fa156fbef513c4e6134f022a85b1ffdd59b2a1
(2) 0x6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c
(3) 0x646f1ce2fdad0e6deeeb5c7e8e5543bdde65e86029e2fd9fc169899c440a7913
(4) 0xadd53f9a7e588d003326d1cbf9e4a43c061aadd9bc938c843a79e7b4fd2ad743
(5) 0x395df67f0c2d2d9fe1ad08d1bc8b6627011959b79c53d7dd6a3536a33ab8a4fd
(6) 0xe485d098507f54e7733a205420dfddbe58db035fa577fc294ebd14db90767a52
(7) 0xa453611d9419d0e56f499079478fd72c37b251a94bfde4d19872c44cf65386e3
(8) 0x829e924fdf021ba3dbbc4225edfece9aca04b929d6e75613329ca6f1d31c0bb4
(9) 0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773

계정이름이 동일한것을 볼 수 있었다. 이중에 private key 하나를 가져다 메타마스크에 연결하면 끝.

반응형

'개발 > web3' 카테고리의 다른 글

[brownie] Network에 ganache 추가하기  (0) 2022.05.04