0

I need to view NFT-image with all metadata. I decide to call tokenURI() function like it, but it's ain't working

private fun getNFTMetadata() = viewModelScope.launch(Dispatchers.IO){
    //tokenURI  -- by token ID
    val web3j: Web3j = createWeb3j() ?: return@launch

    var ids = listOf<Uint256>(Uint256.DEFAULT)

    val function: org.web3j.abi.datatypes.Function = org.web3j.abi.datatypes.Function(
        "tokenURI",
        ids,
        listOf()
    )

    val encodedFunction = FunctionEncoder.encode(function)
    val response: EthCall = web3j.ethCall(
        Transaction.createEthCallTransaction(WALLET_ADDRESS, CONTRACT_ADDRESS, encodedFunction),
        LATEST
    ).sendAsync().get()

    if (response.value != null){
        state.value = response.value
    } else {
        state.value = "NAN"
    }
}

private fun createWeb3j(): Web3j? {
    val webSocketService = WebSocketService(WEB_SOCKET_URL, true)
    try {
        webSocketService.connect()
    } catch (e: ConnectException) {
        e.printStackTrace()
    }
    return Web3j.build(webSocketService)
}

I really don't know how to call that function rightly. Help me please!)

Vando
  • 11
  • 2

1 Answers1

0

I found my mistake. I had change received parameters.

    private fun getNFTMetadata() = viewModelScope.launch(Dispatchers.IO){
    //tokenURI  -- by token ID
    val web3j: Web3j = createWeb3j() ?: return@launch

    val big: Uint256 = Uint256(1)

    val function: org.web3j.abi.datatypes.Function = org.web3j.abi.datatypes.Function(
        "tokenURI",
        listOf(big),
        listOf(object : TypeReference<Utf8String>() {})
    )

    val encodedFunction = FunctionEncoder.encode(function)
    val response: EthCall = web3j.ethCall(
        Transaction.createEthCallTransaction(WALLET_ADDRESS, CONTRACT_ADDRESS, encodedFunction),
        LATEST
    ).sendAsync().get()

    if (response.value != null){

        state.value = response.value
    } else {
        state.value = "NAN"
    }
}
Vando
  • 11
  • 2