안녕하세요
스마트 계약 관련해서 reactjs기반으로 프로젝트를 진행하고 있는데 주제의 제목과 같은 에러가 지속해서 발생해 문의드립니다.
맨 처음 로그인 한 후 바로 BloodContract 계약에 접근시 해당 계약에 의도한 function이 정상적으로 작동합니다.
// homepage에서 바로 로그인 했을 경우
const integrateWallet = (privateKey) => {
console.log('pk:', privateKey)
const walletInstance = caver.klay.accounts.privateKeyToAccount(privateKey)
caver.klay.accounts.wallet.add(walletInstance)
// 기존 wallet.add 가 아닌 Keyring으로 접근해봤다.
// caver.wallet.add(caver.wallet.keyring.createFromPrivateKey(privateKey))
console.log("Whole Wallet Instance : ", caver.klay.accounts.wallet)
console.log("Caver Wallet Access :", caver.klay.accounts.wallet[0])
sessionStorage.setItem('walletInstance', JSON.stringify(walletInstance))
console.log("Caver Wallet Length : ",caver.klay.accounts.wallet.length)
// 개인 조회 키 암호 설정 test
BloodContract.methods.set_InquiryPW('0x54ea798eed97f16c35d2265e94cc2d275ca67055',1000).send({
from:walletInstance.address,
gas:'2000000'
})
reset()
}
하지만 이후에 다른 component에서
- 앞서 진행한 caver.klay.accounts.wallet.add 한 walletInstance가 접근을 하면 length를 0을 Return합니다
- sessionStorage에 사용자가 입력한 privateKey를 기반으로 다시 해당 Component에서 새로운 walletInstance를 생생해 앞선 계약에 접근한 후 동일한 기능을 수행하면 console.log로 " Uncaught (in promise) Error: Returned error: unknown account at Object.ErrorResponse "가 지속적으로 발생합니다.
우선적으로 caver.klay.accounts.wallet에 정보를 저장한 후 다른 페이지의 컴포넌트에서 접속할 시 왜 초기화가 되었는지 궁금하고
두번째로는 동일한 작업을 동일하게 수행했는데 왜 다른 Component에서는 정상적으로 수행되지 않는지 궁금합니다.
감사합니다
// homepage/myinfo 페이지를 통한 접근
export const handleTouch = async () => {
console.log("Caver Wallet Length : ",caver.klay.accounts.wallet.length);
// const walletInstance = await caver.klay.accounts.wallet && await caver.klay.accounts.wallet[0]
// 어거지 try
console.log("Data From Session",sessionStorage.getItem("walletInstance"));
const wallet_json = JSON.parse(sessionStorage.getItem("walletInstance"))
const privateKey = wallet_json.privateKey;
console.log("Private Key From Session",privateKey);
const walletInstance = caver.klay.accounts.privateKeyToAccount(privateKey)
console.log("Address of WalletInstance : ",walletInstance.address);
if (!walletInstance){
console.error("Wallet Instance Fetch Failed");
} else {
console.log("Valid Caver Instance")
}
// 개인 조회 키 암호 설정 test
BloodContract.methods.set_InquiryPW('0x54ea798eed97f16c35d2265e94cc2d275ca67055',2000).send({
from:walletInstance.address,
gas:'2000000'
})
// Account 없이 balance를 Smart Contract 값 조회
const balances = await BloodContract.methods.balances('0xA1C889E67f0B762675aD74120c813E4c790F19aC').call()
console.log("Token Balance is : ", balances);
console.log("cycle done");
}