Klaytn-contract 안의 마켓플레이스 컨트랙트 호출 문의 드립니다

function onKIP7Received(address operator, address payable from, uint256 amount, bytes memory data) public returns (bytes4) {
    (address kip17Contract, uint256 tokenId) = abi.decode(data, (address, uint256));
    Sale storage sale = _sales[kip17Contract][tokenId];
    
    // 이 함수는 kip7Contract에서 자동 호출되므로 sender가 contract이 되는것이다
    address priceContract = msg.sender;

    // 토큰 계약서와 금액이 동일한지 확인
    require(sale.priceContract == priceContract, "SLMarket: priceContract not matched");
    require(sale.price == amount, "SLMarket: price not matched");

    // from은 결국 NFT구매자이므로 buyer로 변수를 정확하게 구분한다
    address payable buyer = from;

    // 판매가 진행됨을 알려준다
    emit SaleMatched(kip17Contract, tokenId, sale.seller, sale.priceContract, sale.price, buyer);

    // 아래 함수는 마켓이 seller에게 price를 전송하는것임
    IKIP7(sale.priceContract).safeTransfer(sale.seller, sale.price);
    // NFT 토큰을 전송함
    IKIP17(kip17Contract).transferFrom(sale.seller, buyer, tokenId);

    // 판매 완료
    delete _sales[kip17Contract][tokenId];
    return _KIP7_RECEIVED;
}

위 코드는 마켓플레이스를 참고하여 자신만의 토큰을 전송할 때 호출되는 함수로 알고 있고
KIP17FixedExchange를 참고한 것입니다
앞서 문의를 드렸을때는 caver-js 를 호출하는 경우였는데요. 사용자 편의를 위해서는 결국 kaikas 지갑으로 토큰을 전송해서 위 함수가 호출되도록 하는게 맞는 개발방법 같아요

그래서 kaikas-tutorial에서 token transfer 에서 바로 지갑을 연결해서 토큰 컨트랙 주소 넣어주고 from, to, amount 항복 다 제대로 넣어서 전송을 했습니다. 했더니…

마켓주소로 토큰이 잘 받아졌는데 왜…
위 require 부분을 잘 통과했는데도 불구하고 마켓컨트랙트에 그대로 토큰이 남아있는건가요??

마켓 바오밥 주소입니다…
0xf1a55806041614328bfF5E382c907758c578d559

이 주소를 가보시면 사용자 T2L 토큰을 그대로 들고 있습니다. 마켓으로 kaikas 지갑을 통해 전송했는데
컨트랙이 토큰을 판매자에게 전송하지 않는건지요? emit 호출도 당연 하지 않았구요…

뭐 하나 제대로 동작을 하지 않으니 dapp을 개발하라는건지 마라는건지 진심 답답할 뿐입니다 ㅜ.ㅜ

속시원하게 kaikas를 사용한 마켓플레이스 샘플이라도 올려주실수는 없습니까??