inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[D.P.(DappProject)] 디앱 프로젝트(NFT 생성, NFT 구매 및 판매)

구매 함수 (purchaseAnimalToken) 작성

vm error: out of gas

223

dlqhdus628

작성한 질문수 3

1

안녕하세요. 강의 잘 듣고 있습니다:)

제가 코드를 다 쓰고 purchaseAnimalToken을 테스트 하는데

vm error: out of gas 가 뜹니다. gasLimit는 3000000로 설정되어있는데 왜 그런 걸까요?

열심히 구글링을 했는데도 답을 찾지 못해 질문 남깁니다.

pop() 때문에 에러가 나는 것 같은데 강의를 보고 똑같이 따라 했는데 왜 저만 에러가 날까요...?ㅠㅠㅠ

dapp blockchain solidity nft

답변 1

0

h662

구매 함수 실행 하실때 리믹스 상에서 Value에 정확한 구매 가격을 입력한 후 실행 하신게 맞으신가요??

 

해당 에러만 봐서는 판단하기가 힘드네요.
전체코드를 공유 받을 수 있을까요?

0

dlqhdus628

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "MintAnimalToken.sol";

contract SaleAnimalToken {
    MintAnimalToken public mintAnimalTokenAddress;

    constructor (address _mintAnimalTokenAddress) {
        mintAnimalTokenAddress = MintAnimalToken(_mintAnimalTokenAddress);
    }

    mapping(uint256 => uint256) public animalTokenPrices;

    uint256[] public onSaleAnimalTokenArray;

    function setForSaleAnimalToken(uint256 _animalTokenId, uint256 _price) public {
        address animalTokenOwner = mintAnimalTokenAddress.ownerOf(_animalTokenId);

        require(animalTokenOwner == msg.sender, "Caller is not animal token owner.");
        require(_price > 0, "Price is zero or lower.");
        require(animalTokenPrices[_animalTokenId] == 0, "This animal token is already on sale.");
        require(mintAnimalTokenAddress.isApprovedForAll(animalTokenOwner, address(this)), "Animal token owner did not approve token.");
        
        animalTokenPrices[_animalTokenId] = _price;
        
        onSaleAnimalTokenArray.push(_animalTokenId);
    }

    function purchaseAnimalToken(uint256 _animalTokenId) public payable {
        uint256 price = animalTokenPrices[_animalTokenId];
        address animalTokenOwner = mintAnimalTokenAddress.ownerOf(_animalTokenId);

        require(price > 0, "Animal token not sale");
        require(price <= msg.value, "Caller sent lower than price");
        require(animalTokenOwner != msg.sender, "Caller is animal token owner");

        payable(animalTokenOwner).transfer(msg.value);
        mintAnimalTokenAddress.safeTransferFrom(animalTokenOwner, msg.sender, _animalTokenId);

        animalTokenPrices[_animalTokenId] = 0;

        // if(onSaleAnimalTokenArray[i] == _animalTokenId)
        // if(animalTokenPrices[onSaleAnimalTokenArray[i]] == 0)
        for(uint256 i=0; i < onSaleAnimalTokenArray.length; i++){
            if(animalTokenPrices[onSaleAnimalTokenArray[i]] == 0){ 
                onSaleAnimalTokenArray[i] = onSaleAnimalTokenArray[onSaleAnimalTokenArray.length - 1];
                onSaleAnimalTokenArray.pop();
            }
        }
    }

    function getOnSaleAnimalTokenArrayLength() view public returns(uint256) {
        return onSaleAnimalTokenArray.length;
    }

}

전체 코드 보내드립니다. 왜 에러가 뜨는 걸까요?

댓글 달아주셔서 감사합니다:)

0

h662

주신 코드로 실행했었는데 이상없이 잘 실행됩니다..

네트워크 상황에따라서 실행이 안되는 경우가 있어서 

다시한번 배포해서 테스트해보시고

그래도 실행이 안되면 아래 주소 들어가셔서

메타마스크의 뭄바이 테스트넷 RPC URL 변경 후 테스트 해보시길 바랍니다.

https://docs.polygon.technology/docs/develop/network-details/network/

 

잘되면 공유한번 부탁드리겠습니다 감사합니다 ^^

0

dlqhdus628

Javascript VM(London) 말고 다른 EVM으로 하니까 되더라고요. 

댓글 달아주셔서 감사합니다:)

localhost 전환이 안됩니다.

0

176

1

리팩토링 1 강의 getAnimalTokens() 함수 사용 권한 문의

0

270

1

npm run start에러

0

363

1

TypeError Web3Config 에러가 납니다 함수를 불러올 수 없음

0

484

1

chakraui zeg.js 오류

0

450

1

npm i @openzeppelin/contracts 실행 시 권한 에러

0

590

1

프론트앤드 셋팅 오류

0

560

1

블록체인 내의 데이터를 서버에 계속 update 시킬 수 있을까요?

0

328

1

Error: not found MintAnimalToken.sol

1

361

1

코드는 어디서 볼 수 있나요??

2

439

1

remix 설치 자체가 안 되네요

1

502

1

민팅시 사진 직접 등록

1

351

1

좋은 강의 감사합니다.!

0

211

0

Chakra Ui 에러 config-overrides.js 작성후

1

1019

3

chakra ui 에러

1

958

1

보유 NFT가 보이지 않습니다. metamask 에러

0

303

1

구매 함수 질문입니다 :>

1

378

1

web3 설정 강의 수강중 메타마스크 연동후 deploy 후 컨트랙트 생성/ 빌드가 안됩니다.

1

432

1

fromWei 질문

1

401

1

frontend>src>ontracts>index.ts

1

379

3

메타마스크 mumbai testnet연결에 계속 실패합니다

1

406

1

이미지가 뜨지 않습니다.

1

240

1

polygon faucet에서 폴리곤을 받을 수 없습니다

1

267

1

window.ethereum

2

1119

1