<초보개발> ValueTransferMemo 를 사용시 input 값을 어떻게 줄지 몰라서 에러가 발생합니다

안녕하세요
Klaytn 초보입니다.

개발은 자바로 하고 있습니다.

현재 작업하고 있는 com.klaytn.caver 버젼입니다.
implementation ‘com.klaytn.caver:core:1.5.7’
implementation ‘xyz.groundx.caver:caver-java-ext-kas:1.1.1-rc.1’

ValueTransferMemo 를 사용시 input 값을 어떻게 줄지 몰라서 에러가 발생합니다.

input 값을 여러방식으로 해도 에러가 납니다.
샘플에서 잇는 String input = “0x68656c6c6f”; 깂으로 넣으면 잘됩니다.
그리고 이 부분은 블럭체인 정보에서 보니까 hello로 보입니다.
input을 어떤 방식으로 보내야 하는지요…?
input을 샘플이 있으면 input 만드는 부분 샘플 부탁합니다.
// 밑에 보면 작업을 해 본 방식입니다. (다 안욉니다.)

			        ValueTransferMemo valueTransfer = new ValueTransferMemo.Builder()
			                .setKlaytnCall(caver.rpc.getKlay())
			                .setFrom(keyring.getAddress())
			                .setTo("0xbceee75d94f032638b1ff7c5915a2290ef52b444")
			                .setValue(value)
	//		                .setNonce("AASDFSDFSDFSDFS")		                
	//		                .setGas(BigInteger.valueOf(25000))
			                .setGas(BigInteger.valueOf(55000))

// .setSignatures(signatureData)
.setInput(input)
.build();

// 작업을 해 본 방식입니다. (다 안욉니다.)
// ------ 문제 되는 부분 ----------------
String input = “”;
String sha256hex = Hashing.sha256()
.hashString(“abcdefghijklm”, StandardCharsets.UTF_8)
.toString();
input= “0x” + sha256hex;

			        byte[] serializedMember;
			        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
			            try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
			                oos.writeObject("1234");
			                // serializedMember -> 직렬화된 member 객체
			                serializedMember = baos.toByteArray();
			            }
			        }
			        
			        // 바이트 배열로 생성된 직렬화 데이터를 base64로 변환
			        System.out.println(Base64.getEncoder().encodeToString(serializedMember));
			        input = "0x" + Base64.getEncoder().encodeToString(serializedMember);

			        input = "0x" +serializedMember.toString();
			        System.out.println("input==>" + input);

// ------ 문제 되는 부분 ----------------

답변 부탁합니다.

안녕하세요.

ValueTransferMemo의 input 필드에 들어가는 데이터는 16진수로 데이터를 구성해서 넣어주면 됩니다. 특정 character set에 구애받는 것이 아니라, 만들고자 하시는 프로그램 혹은 서비스에서 읽어서 사용할 수 있는 데이터로 구성하시면 됩니다.

위에서 언급하신 블록체인 정보는 클레이튼 스코프를 이야기하시는 것 같은데, 클레이튼 스코프에서는 사용자의 편의성을 제공해주기 위해 hex string의 input을 utf-8로 변환해서 보여주는 기능을 제공해주고 있습니다.
클레이튼 스코프에서 input을 의미있는 문자열로 보고싶으시다면 아래와 같이 input을 구성해서 blockchain에 보내주시면 됩니다.

String input = Numeric.toHexString("abcdef".getBytes(StandardCharsets.UTF_8));

감사합니다
테스트 했더니 잘 해결되었습니다.^^