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

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은 해결 완료!!

Sort:  

[광고] 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 !

Coin Marketplace

STEEM 0.20
TRX 0.15
JST 0.030
BTC 64884.95
ETH 2619.31
USDT 1.00
SBD 2.82