tomusdrw / rust-web3

Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library. ENS address: rust-web3.eth
MIT License
1.45k stars 465 forks source link

Transfer ERC20 Tokens Using Contracts #671

Open hasanparasteh opened 1 year ago

hasanparasteh commented 1 year ago

I'm having trouble transferring ERC20 tokens. I created the below method to construct a transaction and then broadcasting the raw transaction to the blockchain. here I have a little problem with using ABI! I call the transfer method but IDK how to provide _to & _value to the call function. Also when I call this method my code panics with below information:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Api(Rpc(Error { code: MethodNotFound, message: "The method eth_sendTransaction does not exist/is not available", data: None }))'

Here is my method declaration:

pub async fn transfer_erc20_token(
    contract: Contract<Http>,
    private_key: SecretKey,
    from: Address,
    to: Address,
    value: U256
) -> Result<H256, web3::contract::Error> {
    let c = contract.call(
         "transfer", 
         (to, value,), 
         from, 
         ContractOptions::default()
     )
     .await.unwrap();

    Ok(c)
}

And this is a piece of abi I provided to setup Contract object:

{
        "constant": false,
        "inputs": [
            {
                "name": "_to",
                "type": "address"
            },
            {
                "name": "_value",
                "type": "uint256"
            }
        ],
        "name": "transfer",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
}