state를 변경여부에 대한 판단은 직접 solidity 공식문서를 보고 파악하시기 바랍니다.
첫번째 방법 : 스마트 컨트랙트의 state를 변경하지않는 함수의 경우는 klay_call json/rpc를 통해서 호출할 수 있습니다.
두번째 방법 : 스마트 컨트랙트의 state를 변경하는 함수를 호출할 경우는 SmartContractExecution transaction을 직접 만들어서 klay_sendRawTransaction 혹은 klay_sendTransaction을 통해서 호출할 수 있습니다.
문제는 첫번째 방법이나 두번째 방법 모두 input 필드를 요구한다는 점인데, 이 input필드는 스마트컨트랙트를 호출하기 위한 인코딩 데이터가 필요합니다. 이 인코딩된 데이터를 만드는 룰도 솔리디티 공식문서에 나와있으니 참고해보시면 좋을 것 같습니다.
이 인코딩 된 input필드는 직접 만드실 순 있으나 많은 불편함이 있기에, input 데이터를 만들어 줄 수 있는 caver나 web3등을 사용하여 input을 만들어서 직접 rpc API를 호출 하실 수 있을 것 같습니다.