본문 바로가기
개발 학습/블록체인

클레이튼 트랜잭션 처리시 "invalid unit price"

by StelthPark 2022. 4. 2.

프로젝트3에서 만든 staking에 추가적인 기능을 구현해보려고 하는도중에 잘 예치해둔 10개의 KFT토큰을 출금하거나 현재 발생된 예치이자를 출금하려고하니.. 다음과 같은 오류가 발생했다. 처음에는 출금 메소드안에 들어 갈 숫자가 toWei나 toFrom으로 쓰지말고 caver에서 제공하는 convertToPeb의 convert를 사용하지 않아서 그런가?.. 하며 생각해보았지만 이전에는 잘 작동 됐는데 갑자기 안된다는 것에서 새로운 업데이트가 있었는지 확인해보았다.

 

 

클레이튼 공지사항을 보니 3월3일자로 GAS비가 변경이 돼었다.

https://medium.com/klaytn-kr/notice-gas-price-adjustment-announcement-kr-6e45db8056c0

그래서 기존에 send() 인자로 넣은 gasPrice부분의 하드코딩을 하지말고 현재 가스비가 업데이트 될 때 마다 새롭게 가져와서 적용할 수 있도록  아래처럼 api를 사용하였다.

 

기존에는 gasPrice를 25*10^9를 사용했으나 3월3일자로 25에서 750(5월 22일, 250으로 하향조정됨)으로 바뀌게되었다. 매번 이렇게 업데이트 될 때마다 하드코딩 할 수 없으니 현재 블록에서 유효한 가스범위를 불러와주는 Caver.klay.gasPriceAt("latest")를 사용하여 가스비를 불러와보니 16진수로 나타났고 이를 10진수로 변환하여 gasPrice에 할당했다.

 

  const withdrawl = async () => {
    setShowModal(true);
    setMessage(`Please sign the Wallet and wait until "Success!"`);
    if (window.klaytn) {
      window.klaytn._kaikas.isUnlocked().then(async (result) => {
        if (result === true) {
          await window.klaytn._kaikas.isApproved().then(async (result) => {
            if (result === true) {
              const caver = new Caver(window.klaytn);
              await caver.klay.gasPriceAt("latest").then(async (nowGasPrice) => {
            
                await caver.klay
                  .getAccounts()
                  .then(async (account) => {
                    let stakeContract = new caver.klay.Contract(stakingAbi, stakingContract);
                    stakeContract.methods
                      .withdraw(caver.utils.toWei(String(inputData), "ether")) //출금함수
                      .send({ from: account[0], gasPrice: parseInt(nowGasPrice, 16), gas: 210000 })
                      .then(() => {
                        setMessage("Withdraw on KFT Success!");
                        document.location.href = `/stakingForKlaytn`;
                      })
                      .catch((err) => {
                        setClosebox(true);
                        setMessage(err.message);
                      });
                  })
                  .catch((err) => {
                    setClosebox(true);
                    setMessage(err.message);
                  });
              });
            }
          });
        }
      });
    } else {
      alert("there's no kaikas");
      setShowModal(false);
    }
  };

 

+추가 (5월 22일, 클레이튼 가스비 인하 후 250으로 변경되었다.

750이 아닌 250을 사용하면 된다.

댓글