Error: Returned error: unknown account 에러 문의 드립니다

안녕하세요

민팅 테스트를 하려는 중에 Error: Returned error: unknown account 에러가 생겨서 문의 드립니다.

const config = {
    rpcURL: 'https://api.baobab.klaytn.net:8651',
};
const caver = new Caver(config.rpcURL);

const myContract = new caver.klay.Contract(ABI as AbiItem[], CONTRACTADDRESS);

const accounts = await window.klaytn.enable();
const account = accounts[0];

const amount = 1;

const total_value = new BigNumber(1 * (await check_status()).mintPrice); // 민팅 수량 선택 (amount)

    try {
        const gasAmount = await myContract.methods.publicMint(amount).estimateGas({
            from: account,
            gas: 6000000,
            value: total_value,
        });

        const tx_result = await myContract.methods.publicMint(amount).send({
            from: account,
            gas: gasAmount,
            value: total_value,
        });

위 사진과 같은 부분에서 에러가 계속 발생합니다.

지갑 연결 후 , try 문에서 console에서 account가 잘 찍히다가

tx_result 에서 돌지 못하고 바로 catch문으로 가네요

혹시 무엇이 문제여서 unknown account 에러가 나오는지 궁금합니다.

[버전]
version = Klaytn/v1.9.0/linux-amd64/go1.18
node = v16.16.0

ABI는 아래와 같습니다

        {
        constant: false,
        inputs: [
            {
                internalType: 'uint256',
                name: 'requestedCount',
                type: 'uint256',
            },
        ],
        name: 'publicMint',
        outputs: [],
        payable: true,
        stateMutability: 'payable',
        type: 'function',
    },

컨트랙트는 아래와 같습니다.

function publicMint(uint256 requestedCount) external payable {
      require(publicMintEnabled, "The public sale is not enabled!");
      require(_lastCallBlockNumber[msg.sender].add(_antibotInterval) < block.number, "Bot is not allowed"); //안티 봇 방지, 마지막 블록에서 몇 초동안 같은 함수를 실행할 수 없는지 (newAntibotinterval)
      require(block.number >= _mintStartBlockNumber, "Not yet started"); // 민팅 시작 시간 의미 (newMintStartBlockNumber)
      require(requestedCount > 0 && requestedCount <= _mintLimitPerBlock, "Too many requests or zero request"); // 트랜잭션당 최대 몇 개를 민팅 할 건지(newMintLimitPerBlock)
      require(msg.value == _mintPrice.mul(requestedCount), "Not enough Klay"); // 전체 민팅 수량 (newMaxSaleAmount)
      require(_mintIndexForSale.add(requestedCount) <= _maxSaleAmount + 1, "Exceed max amount"); // 몇 번 index 부터 민팅을 시작 할 것인지 (newMintindexForSale) mintingInformation 눌러서 확인 후 실행 0,1,0,0,0,0,0
      require(balanceOf(msg.sender) + requestedCount <= _mintLimitPerSale, "Exceed max amount per person"); // 한 사람이 가질 수 있는 최대의 NFT 갯수(newMintLimitPerSale)

      for(uint256 i = 0; i < requestedCount; i++) {
        _mint(msg.sender, _mintIndexForSale);
        _mintIndexForSale = _mintIndexForSale.add(1);
      }
      _lastCallBlockNumber[msg.sender] = block.number;
    }
1개의 좋아요

안녕하세요

사용하고계신 caver.wallet에 from주소에 해당하는 키가 주입되어 있는지 확인해보시겠어요?
참고. methods.method.send

2개의 좋아요

caver.wallet은 사용하지 않고 있습니다.

console.log(caver.wallet.isExisted(address)); 의 결과는 false 로 나오고 있습니다.

const connect = async (): Promise<IWallet | null> => {
    const accounts = await window.klaytn.enable();

    if (window.klaytn.networkVersion === 8217) {
        console.log('메인넷');
    } else if (window.klaytn.networkVersion === 1001) {
        console.log('테스트넷');
    } else {
        alert('ERROR: 클레이튼 네트워크로 연결되지 않았습니다!');
        return null;
    }

    let account = accounts[0] as string;
    const balance = await caver.klay.getBalance(account);

    return {
        account: account,
        balance: caver.utils.fromPeb(balance, config.token),
    };
};

위처럼 connect()를 사용하여 kaikas 지갑에 로그인 한 뒤에 return 된 account 값을 가져와서 쓰고 있습니다.

다른 실습 코드를 가져와서 쓰고 있는데 거기서도 따로 caver.wallet 을 이용하지 않고 있더라구요… 도움 부탁드리겠습니다.

const caver = new Caver(‘https://api.baobab.klaytn.net:8651’)

const caver = new Caver(window.klaytn);
로 변경하니 되네요

3개의 좋아요