Transactions

將自定義 ERC20 代幣從一個地址發送到另一個地址

  • February 28, 2018

如果我想發送 EBTC/ECASH 自定義 ERC20 代幣,如何將自定義 ERC20 代幣從一個錢包發送到另一個錢包。

我寫了一種方法,可以將乙太幣從一個賬戶發送到另一個賬戶,我怎麼能對非乙太幣交易做同樣的事情?

public static void sendCustomToken(String privateKey,String toAccount, double amount) throws Exception{ 

Web3j web3 = Web3j.build(new HttpService("http://localhost:8180/")); 
BigInteger key = new BigInteger(privateKey,16); 
ECKeyPair ecKeyPair = ECKeyPair.create(key.toByteArray()); 
Credentials credentials = Credentials.create(ecKeyPair); 
TransactionReceipt transactionReceipt = Transfer.sendFundsAsync( web3, credentials, toAccount, BigDecimal.valueOf(amount), Convert.Unit.ETHER).get(); 

System.out.println("Transaction Hash:"+transactionReceipt.getTransactionHash());
}

自定義代幣:eBTC 合約地址:0x2fd41f516fac94ed08e156f489f56ca3a80b04d0 代幣小數位數:8

任何幫助或指示?

我假設您正在使用 Web3j 和部署的智能合約實現 ERC20 介面,其中傳輸方法如下所示:

function transfer(address _to, uint256 _value) public returns (bool success) {
   require(balances[msg.sender] >= _value && _value > 0);
   balances[msg.sender] -= _value;
   balances[_to] += _value;
   return true;
}

您可以使用 web3j 包裝器為您的合約呼叫區塊鏈上的合約方法。假設您的 Contract 文件名是MyContract.sol,那麼您將需要solc編譯器和web3j工具,並在控制台中執行以下操作:

$ solc {contract}.sol --bin --abi --optimize -o {output-dir}/

這將生成.abi.bin文件,您可以從中生成 java 包裝類:

$ web3j solidity generate /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name

這將為您的合約生成一個 java 包裝類,MyContract.java您可以在其上呼叫智能合約上所有可用的方法:

import static org.web3j.tx.Contract.GAS_LIMIT;
import static org.web3j.tx.ManagedTransaction.GAS_PRICE;

//web3j initialization code goes here

//Load the deployed contract:
MyContract contract = MyContract.load(contractAddress, web3j, credentials,     GAS_PRICE, GAS_LIMIT);

//Call methods on the contract:
Future<> result = contract.transfer(_to, _value);

您可以在此處找到有關如何使用智能合約包裝器的更多資訊。希望有幫助。

編輯。 abi對於這個特定的契約,bin可以從etherscan.io獲得 即使您不是契約的所有者,您也可以轉移代幣。但是您只能將可用的代幣轉移到您自己的帳戶中,如合​​同中所示:

function transfer(address _to, uint256 _amount) returns (bool success) {
    if (balances[msg.sender] >= _amount 
       && _amount > 0
        && balances[_to] + _amount > balances[_to]) {
        balances[msg.sender] -= _amount;
        balances[_to] += _amount;
        Transfer(msg.sender, _to, _amount);
       return true;
    } else {
        return false;
    }
}

引用自:https://ethereum.stackexchange.com/questions/29607