KAS API /v2/transfer, /v2/tx/fd-user/value(/v2/tx/value) 관련 질문입니다

안녕하세요.

EN노드를 운영 중인 회사에서 근무중인 초급 개발자입니다.
현재 EN노드의 운영비용이 너무 비싸 KAS로 이관검토를 하면서 테스트를 하고 있는데

몇가지 질문사항이 있어 글을 남깁니다.

  1. /v2/tranfer의 결과로 응답을 받았을 때 items에 있는 object가 각각 하나의 블록이라고 생각하면 될까요??
    1-1 각각의 블록이라면 이더리움처럼 각 블록에 tx가 여러 개가 응답으로 오는 건가요??

  2. 클레이전송 API 호출 시 하나의 블록에 여러 tx를 한꺼번에 전송하는 방법이 궁금합니다.
    2-1 이더리움은 가스비를 줄이기 위해 하나의 블록에 여러 tx를 담아서 호출하는 것으로 알고 있는데 KAS에서
    /v2/tx/fd-user/value(/v2/tx/value)을 호출할 때 이더리움처럼 하나의 블록에 여러 tx를 담아서
    호출 할 수 있나요??
    2-2 위 의 질문내용처럼 이더리움은 가스비를 줄이기 위해 하나의 블록에 여러 tx를 담아서 이체요청을 하는 걸로
    알고 있는데 KAS에서도 가스비를 낮출 수 있는 방법이 있는지 궁금합니다.

위 3가지 사항이 궁금하여 질문을 드립니다.

감사합니다.

안녕하세요, 클레이튼 포럼에 질문을 올려주셔서 감사드립니다.

  1. /v2/transfer는 node API가 아니고 token history API의 /v2/transfer를 말씀하시는 것 같은데 맞을까요?
    item의 각 결과는 실제 "전송 결과"라고 생각하시면 됩니다. 한 트랜잭션에서도 스마트 컨트랙트에서 NFT를 여러개 전송하면 여러 아이템이 나올 수 있습니다. 블록의 내용을 조회하고 싶으시면 JSON RPC 호출을 이용하셔서 klay_getBlockByNumber와 같은 함수를 호출하셔야 합니다.

2-1. 블록과 트랜잭션의 개념이 제가 알고 있는 것과 조금 다른 것 같습니다. 기본적으로 블록은 트랜잭션들의 모음이라고 생각하시면 되는데, 트랜잭션의 생성 주체는 각 EOA의 주인인 개인들이라고 생각하시면 됩니다. 하지만 블록은 miner라고 하는 블록을 생성할 수 있는 노드에서 그 노드에 있는 트랜잭션을 모아서 만들게 됩니다.

질문을 제가 다시 이해해보면, 아마도 가스비를 줄이기 위해 여러번의 KLAY 전송을 하나의 트랜잭션으로 하고 싶으시다는 말씀이실 것 같은데, 그렇다면 해당하는 기능을 가지는 스마트 컨트랙트를 구현하셔야 합니다. 스마트 컨트랙트 구현은 이더리움과 클레이튼 모두 솔리디티라는 언어를 사용하기 때문에 이더리움에 구현된 것을 클레이튼으로 쉽게 포팅하실 수 있을 것 같습니다.

2-2. 위의 답변에서 말씀드린 것처럼 해당 기능을 이더리움에서 구현하셨다면 그 기능을 쉽게 클레이튼에 가져오실 수 있을 것 같습니다.

서로 생각하는 바가 조금 다른 것 같아서 답변이 완벽히 되지는 못한 것 같습니다. 제 답변에 추가 질문 주시면 추가로 또 답변해 드릴 수 있도록 하겠습니다.

감사합니다.

답변 감사합니다.

1번 질문은 해결되었습니다 감사합니다

2번의 질문을 조금 다시 질문을 드리면 가스비를 아끼기위한 목적이 맞습니다
저희가 운영에서 배포한 컨트랙트가 있는데 해당 컨트랙트가 하나의 트랜잭션으로 여러번의 KLAY전송을 하는 트랜잭션을 발생시키는 기능을 구현한 컨트랙트인지 모르겠습니다.

/v1/contract/{contract address}를 실행했을 때 저희가 배포한 코인의 이름이 응답으로 오는 것은 확인했습니다.
아마 하나의 트랜잭션에 여러 KLAY를 전송하는 컨트랙트가 맞는거 같아서 하나의 트랜잭션으로 여러번의 KLAY전송호출을 하려고 합니다. 이 방법을 알려주시면 한번 호출해보고 다시 문의드리는게 좋을 것 같습니다.

그리고 답변 기다리면서 생긴 질문사항인데 저희가 배포한 코인(토큰)을 전송하는 API는 없을까요??

안녕하세요,

  1. 하나의 트랜잭션으로 여러번의 KLAY 전송을 위해서는 이 기능을 수행할수 있는 컨트랙트를 별도로 구현하셔야 합니다. 이 기능을 수행할 수 있는 함수를 컨트랙트에 특정함수로 구현하신다음 그 함수를 호출하시면 여러번 KLAY 전송을 하실 수 있습니다.

자세한 구현에 대해서는 아래 질문 참고 부탁드립니다.

또한, 클레이튼은 이더리움에 비해서는 가스비용이 저렴하기 때문에, 가스비를 아끼기 위해서 컨트랙트로 구현하여 KLAY를 전송하는 것이 맞을지에 대해서는 좀 더 고민하시는 편이 좋을 것 같습니다. (구현 비용 vs 절약되는 가스비)

배포한 코인이 KIP-7 기반의 코인이라고 하시면 KIP-7 토큰 전송을 이용하실 수 있습니다. 다만 이 기능의 경우에는 KAS Wallet API의 계정으로만 전송을 할 수 있기 때문에, 원하시는 니즈에 맞지 않을 수 있을 것 같습니다.
이 경우에는 caver-js의 kip7.transfer 함수를 이용하실 수 있습니다.

답변이 되셨길 바랍니다.

감사합니다.

트랜잭션을 실행하기 위해서는 트랜잭션 수수료로 사용될 KLAY가 필요합니다.

그 KLAY가 부족해서 에러가 난 것 같습니다.

어떤 파라미터들을 가지고 어떤 함수를 호출하신건지 좀 더 자세히 알 수 있을까요?

from으로 사용한 주소는 KAS wallet API로 생성한 계정인가요?

from으로 사용된 주소에는 충분한 양의 KLAY가 있나요?

from으로 사용한 주소는 컨트랙트 주소인데 그 계정으로 KLAY를 전송하려고
/v2/tx/value를 실행하려고 했는데 account정보를 가져올 수 없다고 나왔었습니다.

– input (x-chain-id : 1001)
{
“from” : “0x9e481eb17d3c3c07d7a6ab571b4ba8ef432b5cf2”,
“to” : “0xA707bBaa59bF7d8ec6Fb156839834e6FBe79fcdE”,
“value” : “0xAC15A64D4ED8000”,
“submit” : true
}

– output
{
“code”: 1065100,
“message”: “failed to get an account; data don’t exist”,
“requestId”: “1b97ec9e-a9b6-4c0b-86e5-ba01a2d01418”
}

그리고 from에 사용한 계정은 KAS wallet API로 생성한 계정이 아닙니다.
그래서 선임개발자분께서 Cypress에서 마이그레이션 한걸로 알고 있습니다.

트랜잭션은 기본적으로 sender(from 필드에 적는 주소의 소유자)의 서명이 필요한데, 서명을 위해서는 private key가 필요합니다.

KAS wallet에서 관리하는 계정의 경우 KAS가 키를 들고 있기 때문에, 서명을 만들 수 있는데, KAS wallet에서 관리하는 계정이 아닌 경우, 서명을 생성할 수 없습니다. 여기서 에러는 KAS wallet에서 관리하는 계정이 아니기 때문인 것 같습니다.

이럴 경우 KLAY를 전송하기 위해서는 caver를 이용하시기를 권장드리며, 관련 코드는 이 링크에서 확인하실수 있습니다.

감사합니다.

저희 쪽에서 klaytn.support@ozys.net에 문의하여 KCT토큰을 등록한 적이 있습니다.

from의 주소와 동일한 “0x9e481eb17d3c3c07d7a6ab571b4ba8ef432b5cf2” 컨트랙트를 등록요청했었는데
이렇게 되면 KAS API를 사용할 수 있는게 아닌가요?

KAS wallet API는 따로 마이그레이션 작업을 해주어야 하는건가요?

Wallet API 마이그레이션이라는 것은 Wallet에서 제공하는 클레이튼 계정이어야 합니다.

KCT 토큰을 등록한 것이 저 주소라면, from의 값에는 KCT 토큰 주소가 아니고 실제 토큰의 소유자 계정 주소가 들어가야 합니다.

응답의 "status"가 "submitted"라는 이야기는 KAS에서는 문제없이 트랜잭션을 생성했고, 클레이튼 네트워크에 전파했다라는 이야기입니다.

이후에 트랜잭션 조회를 이용하여 해당 txhash가 정말 성공적으로 실행하셨는지 추가로 확인하시면 될 것 같습니다.

이 트랜잭션 조회에서 status가 "committed"라면 트랜잭션 실행이 완료된 것입니다.

KlaytnScope 상에서는 0x87d6312c30c48d0e37dc6d11092dd596fb221d3d 이 주소에 KLAY가 0이 아닌 것 같네요.

감사합니다.

답변감사합니다

제가 Scope Cypress에서 잘못보고 댓글달았었는데
제대로 된거 확인하고 삭제했었습니다ㅜㅜ

혼란을 드려 죄송합니다…

1개의 좋아요