안녕하세요, KIP7 토큰을 전송하는데 Keyring과 private key 없이 지갑으로 바로 연결하려면 어떻게 해야하나요?

안녕하세요, KIP7 토큰을 전송하는데 Keyring과 private key 없이 지갑으로 바로 연결하려면 어떻게 해야하나요?
Keyring 과 Private Key를 사용해서 add wallet 해서 전송은 성공했는데 private key 없이 토큰 전송을 하고 싶습니다. 그냥 Klay 전송하는건 window.caver.sendTransaction()을 사용하면 되는데 KIP7 토큰 전송의 경우 어떻게 해야할지 잘 모르겠네요. 조언 주시면 감사하겠습니다!!!

좋은 하루 되세요.

안녕하세요.

해당부분 동일하게 window.caver.sendTransaction 이용하시면되는데, tx type 을 smart contract execution으로 실행해서 input data 로 토큰의 해당 함수 (transfer 또는 transferFrom 등) 을 수행하시면됩니다.

Private key 넣는방식은 backend 서비스 운영하는 경우 사용하는것으로 활용하시는게 좋고, 실제 사용자대상 서비스는 지갑에서 제공하는 sdk를 쓰셔서 트랜잭션 발생시키는것으로 생각하시면될것같아요.

예시를 드리자면

위링크에서 SMART_CONTRACT_EXECUTION 이사용된 예제를 확인해보세요.

답변되셨길바랍니다.

const amount = 10;
const decimal = 18;
        
        const data = caver.klay.abi.encodeFunctionCall(
            {
              name: 'transfer',
              type: 'function',
              inputs: [
                {
                  type: 'address',
                  name: 'recipient'
                },
                {
                  type: 'uint256',
                  name: 'amount'
                }
              ]
            },
            [
              hospitalWalletKlaytn,
              caver.utils
                .toBN(amount)
                .mul(caver.utils.toBN(Number(`1e${decimal}`)))
                .toString()
            ]
          )
      
          const txHash = await caver.klay
            .sendTransaction({
              type: 'SMART_CONTRACT_EXECUTION',
              from: user,
              to: contractAddress,
              data: data,
              gas: '100000'
            })
            .on('transactionHash', transactionHash => {
              console.log('txHash', transactionHash)
            })
            .on('receipt', receipt => {
              console.log('receipt', receipt)
            })
            .on('error', error => {
              console.log('error', error)
            })

이렇게 처음에 작성을 하였는데
error Error: Returned error: unknown account

이런 에러가 뜨고 위에서 설명해주신대로
window.caver.sendTransaction을 사용하면 이런에러가 뜹니다.

TypeError: window.caver.sendTransaction is not a function

아래 명령어로 다시 시도해보시겠어요?
window.caver.klay.sendTransaction

만약 이것으로도 안된다면,
const caver = Caver(this.klaytn) 형태로, 카이카스를 provider로 이용해 caver instance를 생성하셔서 사용하시면됩니다.

caver 명령어가 문제가 아니였던 것 같네요.
버튼 이벤트에 위 코드를 썼는데 거기서 꼬였던 것 같아요.

답변 감사합니다.