클레이톤 지갑없이 privatekey만 받아 결제 진행

클레이톤 지갑없이 privatekey만 받아 결제 진행 하려고 합니다
근데 지갑 주소로는 결제가 다 되는데
https://baobab.wallet.klaytn.foundation/ 에서 만든 주소나
const keyring = cav.wallet.keyring.generate()로 만든 주소로 결제하려고 하면 밑에 에러가 뜹니다

Returned error: Error: Transaction from address isn’t valid for this account

1.혹시 지갑으로 결제하지 않으면 결제가 안되는 것인지
2.HDWalletProvider이거로 인해서 안되는 것인지
3.된다면 방법좀 알려주시면 감사하겟습니다

안녕하세요.

어떤 식으로 코드를 작성하셨는지 좀 더 자세히 알려주실 수 있으신가요?

1 Like
const { rawTransaction } = await caver.klay.signTransaction({
type: “FEE_DELEGATED_SMART_CONTRACT_EXECUTION”,
from: userData.address,
//배포된 contract의 주소
to: CaverAddress,
data: NFTMarketplaceInstance.methods
.mint(
gg.title,
pinataJsonRsp.data.IpfsHash,
pinataFileRsp.data.IpfsHash,
gg.release,
edition
// MarketAddress
)
.encodeABI(),
gas: “600000”,
value: caver.utils.toPeb(“0”, “KLAY”) // payable 타입일때는 1
});
setIsSigning(false);
caver.klay
.sendTransaction(
{
senderRawTransaction: rawTransaction,
feePayer: feePayerData.address
},
feePayerData.privateKey
)

이런식으로 하였고 userData.address 이가 지갑에서 가져온 주소이면 결제가 됩니다
하지만 Klaytn Wallet 생성한 주소나
const keyring = cav.wallet.keyring.generate()해서 caver.klay.accounts.wallet.add한 주소로 결제하려고 하면 에러가 뜨는데 방법이 있을가여

지갑이 아닌 회워가입 할떄 프라이빗 키를 받아 결제를 진행하려고 합니다

안녕하세요.

이부분의 코드를 읽어보시는 걸 추천드립니다. Getting Started - Klaytn Docs
일단 현재 코드에서 feepayer를 설정하는 부분과, feepayer가 서명하는 부분이 빠져있는 것 같은데요.
클레이튼 닥스의 smart contract 부분을 보시면 아래와 같이 예제에 나와있는 smart contract의 set method를 fee delegation을 적용하여 실행시키실 수 있습니다.

const deployer = caver.wallet.keyring.createFromPrivateKey(deployerPrivateKey)
const feePayer = caver.wallet.keyring.createFromPrivateKey(feePayerPrivateKey)
caver.wallet.add(deployer)
caver.wallet.add(feePayer)

const contractInstance = caver.contract.create(abi, contractAddress)

const signed = await contractInstance.methods.set("key", "value").sign(
         {from: deployer.address, feeDelegation: true, gas: 1000000})

await caver.wallet.signAsFeePayer(feePayer.address, signed)

const receipt = await caver.rpc.klay.sendRawTransaction(signed)
console.log(receipt)

1 Like