안녕하세요. 제가 궁금한점이 생겨서 이렇게 글을 쓰게 됬습니다.
먼저 이더리움에서 트랜잭션을 보내는 방법과 klay에서 트랜잭션을 보내는 부분이 좀 달라서 헷갈리는 부분이있습니다.
먼저 web3.js를 사용하게 되면
const data = await wtContract.methods
.vote(info.contentNum, info.userAddress, info.select)
.encodeABI();
const nonce = await web3.eth.getTransactionCount(
serverAddress,
‘latest’
);
const gasprice = await web3.eth.getGasPrice();
const gasPrice = Math.round(
Number(gasprice) + Number(gasprice / 10)
);
const tx = {
from: serverAddress,
to: process.env.WTTOKENCA,
nonce: nonce,
gasPrice: gasPrice, // maximum price of gas you are willing to pay for this
gasLimit: 5000000,
data: data,
};
const signedTx = await web3.eth.accounts.signTransaction(
tx,
serverPrivateKey
);
const hash = await web3.eth.sendSignedTransaction(
signedTx.rawTransaction
);
이런식으로 TX를 구성하고, 그다음 privateKey를 이용해서 서명한다음 .sendSignedTransaction 함수를 이용해서 보냅니다. 그러나 klaytn doc에서는
const create = await caver.klay.accounts.wallet.add(serverPrivateKey);
console.log(create);
caver.klay.sendTransaction({
type: 'SMART_CONTRACT_EXECUTION',
from: serverAddress,
to: process.env.WTTOKENCA,
data: wtContract.methods.mintToken(user,caver.utils.toPeb('30','KLAY')).encodeABI(),
gas: '300000',
})
.then(function(receipt){
console.log(receipt);
});
이렇게 보내도 트랜잭션이 생성됩니다. web3.js는 롭스텐을 kalytn은 바오밥네트워크를 사용했습니다.
다시 정리해 보자면 klaytn에서 보내는 트랜잭션에서는 서명을 어디서 해주는 건지 궁금합니다. 또한 nonce부분은 필요가 없는 것일까요??
또, type부분을 지정해주지 않으면 안되는 것인지 이것또한 궁금합니다.
마지막으로… 멍청한 질문일 수도 있지만 caver.klaly.sendTransaction 이것과 caver.rpc.klay.sendTransaction은 무슨차이가 있는 것일까요?? 이 rpc가 있고 없고의 차이가 무엇인지 궁금합니다.