# Emit SaleMatched 이벤트가 발생하지 않고 먹통이 됩니다

**URL:** <https://devforum.kaia.io/t/emit-salematched/5869>\
**Category:** Caver\
**Tags:** caver-js\
**Created:** [8월 17, 2022, 7:14오전 UTC](https://devforum.kaia.io/t/emit-salematched/5869 "2022-08-17T07:14:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![11161](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/11161/32/884_2.png) [@11161](https://devforum.kaia.io/u/11161)\
**Post date:** [8월 17, 2022, 7:14오전 UTC](https://devforum.kaia.io/t/emit-salematched/5869/1 "2022-08-17T07:14:14Z")

</div>

// 땅 구매를 위해 호출합니다  
const buyLand = async() =\> {  
var fromAddress = prompt(“구매자 주소 입력하세요”, ADDRESS\_BUYER);  
var tokenId = prompt(“Enter Cell ID”, “1”);  
var sendPrice = prompt(“송금할 토큰 갯수를 입력하세요”, “2”);  
// kip7으로 토큰 전송  
const token\_price = caverKas.utils.convertToPeb(sendPrice);  
// kip17 contract와 tokenId를 encode  
let data = caverKas.abi.encodeParameters([‘address’, ‘uint256’], [CONTRACT\_ADDRESS, tokenId]);  
console.log(data)  
//let data = caverKas.abi.encodeParameter(‘address’, tokenId);  
const receipt = await safeTransferToken(fromAddress, CONTRACT\_ADDRESS\_MARKET, token\_price, data);  
console.log(receipt)  
}

// 토큰 전송 함수  
const safeTransferToken = async(fromAddress, marketContract, price, data) =\> {  
try {  
const receipt = await contractKasKIP7.methods.safeTransfer(marketContract, price, data).send({  
from: fromAddress,  
gas: “800000”,  
// nonce: nonce  
});  
console.log("from: ",receipt.events.Transfer.returnValues[0], "to: ", receipt.events.Transfer.returnValues[1],  
"amount: ", receipt.events.Transfer.returnValues[2]);  
// console.log(receipt);  
// console.log("tokenId: ",receipt.events.SaleMatched.returnValues[1], "sale.seller: ", receipt.events.ApprovalForAll.returnValues[2],  
// "price: ", receipt.events.ApprovalForAll.returnValues[4], "buyer: ", receipt.events.ApprovalForAll.returnValues[5]);  
// console.log(receipt);  
} catch(e) {  
console.log(`[Error]${e}`);  
}  
}

마켓으로 자체 토큰을 전송해서 onKIP7Received 함수가 제대로 호출까지 되고 nft랑 ft 잘 서로 교환이 완료되었는데 klaytn-contracts 안의 KIP17FixedPriceExchange.sol 파일 안에 구현되어 있는대로 emit SaleMatched 가 호출되지 못하고 그냥 먹통이 되어버립니다. 이벤트를 받아야 제대로 완료되었다고 고지를 할텐데요…

// 마켓 컨트랙트  
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);

    // 이 함수를 호출하는쪽은 구매자이다, 첫번째 인자는 판매자 주소이며, 구매자 계좌의 kip7 토큰이 이 주소로 송금된다
    // 두번째 인자는 구매자의 계좌에 sale.price만큼의 잔액이 있어야 성공한다
    // 마켓으로 돈이 전송되었으므로 msg.sender는 마켓 자체임 즉, operator == market
    // 아래 함수는 마켓이 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;
}

```

클레이튼 관계자님 답변 기다립니다… ㅜ.ㅜ 이걸로 몇개월째 진도를 못나가네요 에거 참

위에 emit 도 문제이지만 safeTransfer 호출 이후로 리턴이 안오고 있습니다  
뭐가 문제인걸까요 ㅜ.ㅜ
