체인의정석

테스트 코드에서 이더리움을 전송하는 방법 본문

블록체인/퍼블릭 블록체인

테스트 코드에서 이더리움을 전송하는 방법

체인의정석 2022. 8. 13. 23:33
728x90
반응형

테스트 코드에서 이더리움을 전송하는 방법에 대해서 찾아보았다.

 

아래 링크를 보고 참고해서 알 수 있었다.

https://ethereum.stackexchange.com/questions/101680/how-do-i-send-eth-from-an-account-to-another-in-hardhat

 

How do I send ETH from an account to another in Hardhat?

I tried both signer.sendTransaction({ to, value }); and provider.send("eth_sendTransaction", [{ from, to, value }]);, and neither worked for me. Would be great if your answer could also i...

ethereum.stackexchange.com

 

먼저 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
      });
    })

그럼 보내주었으니 잔고도 체크해 봐야 할 것이다.

 

https://ethereum.stackexchange.com/questions/96372/how-to-get-contracts-ether-balance-at-hardhat-waffle

 

How to get contract's ether balance at hardhat / waffle

I writing hardhat/ethers/waffle unit tests for my contract and need to know Ether balance of my contract. Chai matcher changeEtherBalance needs Signer object to check balance, but I have address of...

ethereum.stackexchange.com

근데 위의 방법에 따라서 잔고를 체크하니 0이 나왔다.

https://www.exceptionlife.com/ethereum/question/3723/hardhat-ether-js-fetching-balance-of-signers-locally-shows-no-ether

 

Hardhat, ether.js - fetching balance of signers locally shows no ether - Ethereum Development Forum

I am trying to fetch the balance of signers in a test locally I didnt change the default value of eth for accounts in th...

www.exceptionlife.com

조금 더 찾아보니 원인을 알 수 있었는데 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

이런 에러가 뜨면서 이더리움의 전송이 되지 않는것이였다.

https://ethereum.stackexchange.com/questions/124235/providererror-error-transaction-reverted-function-selector-was-not-recognized

 

ProviderError: Error: Transaction reverted: function selector was not recognized and there's no fallback function

I'm trying to call a function[propose] from Openzeppelin governor.sol. The function is like this... function propose( address[] memory targets, uint256[] memory values, byte...

ethereum.stackexchange.com

찾아보니 나만 그런게 아니다. 아직 불편한 점도 있는거 같다.

 

그럼 대체제로 ganache를 사용해 보기로 하였다. 내 개인 PC에는 아직 없는 ganache 를 다운받고

https://trufflesuite.com/ganache/

 

Ganache - Truffle Suite

Features VISUAL MNEMONIC & ACCOUNT INFO Quickly see the current status of all accounts, including their addresses, private keys, transactions and balances.

trufflesuite.com

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에서 테스트 이더를 받은 후 프라이빗키 까지 지정해 주면서 테스트 해야 한다.

 

https://rinkebyfaucet.com/

요즘 rinekby는 alchemy의 faucet이 좋은것 같다. 테스트용이 실제 이더가 기존 계정과 섞이면 복잡하니 brave browser를 사용하기로 했다. 하나의 컴퓨터에서 메타마스크를 여러개 다루는 법은 구글 계정을 여러개 쓰거나 브라우져 종류를 firefox, brave, google 3가지를 다르게 쓰는 것이다. 

 

환경변수는

https://cosisaxis.co/using-environment-variables-in-hardhat

 

Using Environment Variables in Hardhat

Introduction Since learning about web3, blockchain, dapps and NFTs I've been so fascinated with the different technologies and how they come together to make an ecosystem. The problem I've been having however is directly tied into hiding my credentia...

cosisaxis.co

여기를 보고 설치하면 잘 된다.

728x90
반응형
Comments