sendRawTransaction 에러

코틀린에서 caver-java 1.6.3 사용해서 SCN으로 sendRawTransaction 하면
Caused by: java.lang.RuntimeException: insufficient funds of the sender for value
가 발생합니다.
아래는 작성한 코드인데 확인 좀 해주세요

val caver = Caver(wallet.endpoint)
        val file = File("/home/uk/UTC--2021-12-24T04-46-43.641884982Z--327f7f32454ff278d710c303503da5aeb7c0ca37")

        val objectMapper = ObjectMapperFactory.getObjectMapper()
        val keyStore = objectMapper.readValue(file, KeyStore::class.java)
        val keyring = KeyringFactory.decrypt(keyStore, "")
        
        caver.wallet.add(keyring);
//        val value = BigInteger(Utils.convertToPeb(BigDecimal.ONE, "KLAY"))

        val valueTransfer = ValueTransfer.Builder()
            .setKlaytnCall(caver.rpc.getKlay())
            .setFrom(keyring.address)
            .setNonce(BigInteger.valueOf(nonce))
            .setTo(address.toCanonicalForm())
            .setChainId(BigInteger.valueOf(1000))
            .setValue(data as String)
            .setGas(BigInteger.valueOf(1000000000))
            .setGasPrice(BigInteger.valueOf(0))
            .build()

        logger.debug("nonce: {}, chainId: {}, gasPrice: {}", valueTransfer.nonce,valueTransfer.chainId, valueTransfer.gasPrice)
        valueTransfer.sign(keyring)

        val result = caver.rpc.klay.sendRawTransaction(valueTransfer?.rawTransaction).send()

@inwardly1

안녕하세요.

우선 공유해주신 에러는 from에 기재되는 address의 KLAY 잔고가 전송하려고 하시는 KLAY 보다 적을 때 발생하는 에러입니다.

Transaction 객체를 만드시기 전에 caver.rpc.klay.getBalance(keyring.getAddress()).send() 를 호출하셔서 계정의 잔고를 확인해보시기 바랍니다 :slight_smile:

더불어 GasPrice 는 직접 설정해주시지 않아도 트랜잭션에 서명할 때 자동으로 네트워크에 설정된 값에 맞춰 설정되게 되므로 0으로 설정하는 라인을 지워주시는 게 좋을 거 같습니다.

잔고 있고 GasPrice 라인 지워도 안됩니다.
다시 확인 부탁드립니다.

[DEBUG] EthereumTransactionOperation.kt:50 balance: 1000000000000000000000000000
Caused by: java.lang.RuntimeException: insufficient funds of the sender for value 

@Denver
나머지는 서비스 체인 문서에 있는거랑 전부 동일하고 genesis.json의 alloc만 추가했습니다.
web3.sendRawTransaction으로 했을 땐 서명 관련 invalid transaction v, r, s values Exception이 발생하네요

@inwardly1

안녕하세요. 튜토리얼을 그대로 따르셨다고 해주셨는데 혹시 Setting up a 4-node Service Chain - Klaytn Docs 섹션도 진행하셨을까요~?

@inwardly1
안녕하세요.
valueTransfer instance를 만들때 사용하신 setValue() 함수에 들어간 값은 어떤 값인지 알 수 있을까요?
코드상에 파라미터로 사용되는 data라는 변수는 없어보이는데요.

그리고, setValue()는 BigInteger 타입도 지원하기때문에 굳이 String 타입으로 캐스팅을 하실필요가 없습니다.
감사합니다.