[Solidity] CompilerError: Stack too deep when compiling inline assembly 조치방법steemCreated with Sketch.

in hive-101145 •  2 years ago 

CompilerError: Stack too deep when compiling inline assembly: Variable value0 is 3 slot(s) too deep inside the stack.

Error HH600: Compilation failed

Solidity를 코딩하다가 위와 같은 이유로 에러를 만났습니다.

이유는 아래 코드 때문인데요.

function hashOrder(Order memory order) public pure returns (bytes32 hash) {
        return
            keccak256(
                abi.encode(
                    ORDER_TYPEHASH,
                    order.exchange,
                    order.maker,
                    order.taker,
                    order.saleSide,
                    order.saleKind,
                    order.target,
                    order.paymentToken,
                    keccak256(order.calldata_),
                    keccak256(order.replacementPattern),
                    order.basePrice,
                    order.endPrice,
                    order.listingTime,
                    order.expirationTime,
                    order.salt
                )
            );
    }

abi.encode 내부에 parameters가 여러개가 포함되는데, 컴파일시 내부적으로 이 파라미터들이 Stack에 쌓이게 되는데 총 16개 이상 넘어 갈 수 없게 되어 있다고 합니다.

그래서 이러한 경우 abi.encodePacked를 이용하여 아래와 같이 쪼갤 수가 있습니다.

function hashOrder(Order memory order) public pure returns (bytes32 hash) {
        return
            keccak256(
                abi.encodePacked(
                    abi.encode(
                        ORDER_TYPEHASH,
                        order.exchange,
                        order.maker,
                        order.taker,
                        order.saleSide,
                        order.saleKind,
                        order.target,
                        order.paymentToken,
                        keccak256(order.calldata_),
                        keccak256(order.replacementPattern)
                    ),
                    abi.encode(
                        order.basePrice,
                        order.endPrice,
                        order.listingTime,
                        order.expirationTime,
                        order.salt
                    )
                )
            );
    }

이것으로 위 Compiler Error은 해결 완료!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

[by @happyberrysboy] [Solidity] CompilerError: Stack too deep when compiling inline assembly 조치방법
https://www.steemit.com/@kr-dev.cu0/happyberrysboy-posting-2023-01-06-16-03

@kr-dev.cu0님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.

This post has been upvoted by @italygame witness curation trail


If you like our work and want to support us, please consider to approve our witness




CLICK HERE 👇

Come and visit Italy Community



랜덤추천작가와 관심작가(2023-01-10)
https://www.steemit.com/@veryhappyday/-2023-01-10

@veryhappyday님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.

랜덤추천작가와 관심작가(2023-01-11)
https://www.steemit.com/@veryhappyday/-2023-01-11

@veryhappyday님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.

Very good content !