일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 깃허브명령어
- Vue.js
- 머신러닝기초
- ethers type
- 스마트컨트렉트테스트
- chainlink 설명
- 스마트컨트렉트 함수이름 중복 호출
- ethers v6
- 컨트렉트 배포 자동화
- git rebase
- ethers
- Vue
- 스마트 컨트렉트 함수이름 중복
- 체인의정석
- rust 기초
- 스마트컨트렉트 예약어 함수이름 중복
- 러스트 기초
- vue기초
- multicall
- 러스트 기초 학습
- 스마트컨트렉트프록시
- ethers websocket
- ethers typescript
- 러스트기초
- 프록시배포구조
- SBT표준
- nestjs 튜토리얼
- 컨트렉트 동일한 함수이름 호출
- ambiguous function description
- nest.js설명
- Today
- Total
체인의정석
테스트 코드에서 이더리움을 전송하는 방법 본문
테스트 코드에서 이더리움을 전송하는 방법에 대해서 찾아보았다.
아래 링크를 보고 참고해서 알 수 있었다.
먼저 signer를 만들어 주어야 한다.
let contractExample: Contract;
let owner: SignerWithAddress;
hardhat에서 정의된 주소에는 이미 이더리움이 내제되어 있기 때문에 이를 이용해서 컨트렉트에 보내주기만 하면 된다.
it("owner should put ether in contract fist", async () => {
await owner.sendTransaction({
to: contractExample.address,
value: ethers.utils.parseEther("1.0"), // Sends exactly 1.0 ether
});
})
그럼 보내주었으니 잔고도 체크해 봐야 할 것이다.
근데 위의 방법에 따라서 잔고를 체크하니 0이 나왔다.
조금 더 찾아보니 원인을 알 수 있었는데 provider를 정의할 때
let provider = ethers.provider;
이걸 써야 실제로 로컬에서 연결된 provider가 나온다고 한다.
console.log("balalnce Of owner is :", await provider.getBalance(owner.address));
provider를 다시 정의하고 이런식으로 하니
balalnce Of owner is : BigNumber { value: "9999998432417007435966" }
제대로 된 잔고가 나온것을 확인할 수 있었다.
그리고 동시에에 확인이 가능했던 것은 hardhat 테스트 넷에서는
Transaction reverted: function selector was not recognized and there's no fallback nor receive function
이런 에러가 뜨면서 이더리움의 전송이 되지 않는것이였다.
찾아보니 나만 그런게 아니다. 아직 불편한 점도 있는거 같다.
그럼 대체제로 ganache를 사용해 보기로 하였다. 내 개인 PC에는 아직 없는 ganache 를 다운받고
https://trufflesuite.com/ganache/
hardhat config에서 여기있는 rpc URL을 설정해 주면 된다.
hardhat config에서 설정은
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
const config: HardhatUserConfig = {
solidity: "0.8.13",
networks: {
ganache: {
url: "HTTP://127.0.0.1:7545"
},
},
};
export default config;
요렇게 트러플에 맞춰 준 후에 실행하는 명령어를 맞춰서 변경해 주었다.
npx hardhat --network ganache test
// [owner, ex2] = await ethers.getSigners();
owner address : 0x52e628f7AdF08e5Af114EbbD6bFAcb3bF3E6B819
ex2 address : 0x6f3354dEFC809d5E96b056D10350c7d81fa7644F
여기에서 getSigners를 해준 후에 주소값을 체크해보니 ganache의 계정이 그대로 붙은 것을 확인할 수 있었다.
근데 여기서도 컨트렉트에 이더리움은 들어가지 않았다...
최후의 선택지는 결국 rinkeby
infura에 가서 rpcurl을 받아오고 faucet에서 테스트 이더를 받은 후 프라이빗키 까지 지정해 주면서 테스트 해야 한다.
요즘 rinekby는 alchemy의 faucet이 좋은것 같다. 테스트용이 실제 이더가 기존 계정과 섞이면 복잡하니 brave browser를 사용하기로 했다. 하나의 컴퓨터에서 메타마스크를 여러개 다루는 법은 구글 계정을 여러개 쓰거나 브라우져 종류를 firefox, brave, google 3가지를 다르게 쓰는 것이다.
환경변수는
https://cosisaxis.co/using-environment-variables-in-hardhat
여기를 보고 설치하면 잘 된다.
'블록체인 > 퍼블릭 블록체인' 카테고리의 다른 글
Chain link 서비스 분석 - chain link VRF 분석 (0) | 2022.09.13 |
---|---|
블록체인 아키텍쳐) 블록체인에서의 Layer 구분 (0) | 2022.08.29 |
faucet 리스트 (업데이트) (0) | 2022.04.27 |
IMX 구조도 정리 (0) | 2021.11.26 |
IMX 이뮤터블 X에 대한 분석 (0) | 2021.11.26 |