체인의정석

hardhat, ethers, typescript 에서 서명정보 및 공개키 등록 및 가져오기 (getSigners, getContractAt) 본문

블록체인/Ethers & web3

hardhat, ethers, typescript 에서 서명정보 및 공개키 등록 및 가져오기 (getSigners, getContractAt)

체인의정석 2023. 7. 20. 10:50
728x90
반응형

hardhat config 에서 먼저 다음과 같이 네트워크와 프라이빗 키를 넣어준다.

    wemixTest: {
      url: 'https://api.test.wemix.com',
      accounts: [process.env.PRIVATE_KEY!,process.env.PRIVATE_KEY2!],
    }

해당 private key에 대한 public key를 불러오려면 다음과 같이 쓰면 된다.

  const signer = await ethers.getSigners();
  console.log("getSigner:", signer[0].address);
  console.log("getSigner:", signer[1].address);

그리고 해당 signer의 경우

  const contractName = await ethers.getContractAt("ContractName",contractAddress,signer[0]);

이런식으로 지정하면 특정 컨트렉트의 정보를 가져와서 서명을 할 수 있게 된다.

물론 프라이빗 키가 하나라면

  const ContractName = await ethers.getContractFactory("ContractName");
  const contractName = await ContractName.attach(ContractAddress);

이렇게 하더라도 똑같이 된다.

해당 부분은 모든 스크립트에 적용 될 만한 부분이었기에 Utils.ts 에다가

export async function getAllSigners(i: number): Promise<Signer> {
  const signers : Array<Signer> = await ethers.getSigners();
  return signers[i];
}

해당 함수를 넣어 준 후에

  const contractName = await ethers.getContractAt("ContractName",contractAddress,getAllSigners[0]);

이런식으로 signer를 넣어주었다.

그리고 msg.sender를 파라미터로 넣고 싶을 때는

  const singers: Signer = await getAllSigners(0);
  const signerAddress = await singers.getAddress();

이런식으로 값을 뽑아서 넣어주었다.

  const contractName = await ethers.getContractAt("ContractName",contractAddress,signer);

이런식으로 하니 서명 및 signer의 퍼블릭 키를 배열 중 원하는 프라이빗 키로 할 수 있다.

* 다만 현재 ethers의 최신 버전은 문법이 많이 바뀌었다고 하며 많은 부분을 고쳐야 한다. 참고로 현재 내가 사용중인 버전은 이건데 아직까진 해당버전의 소스코드가 대부분이기 때문에 아직 최신버전으로 넘어갈 생각은 없다. 

    "ethers": "^5.0.8",
    "hardhat": "^2.12.7",

 

728x90
반응형
Comments